From b3d33612eddd7929eb39da94de2bc4cd897116f0 Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Wed, 9 Sep 2026 11:57:21 +0800 Subject: [PATCH] style: refine hover and upload card feedback --- frontend-dist/css/322.2b40f004.css.gz | Bin 4772 -> 0 bytes frontend-dist/css/417.774caa69.css | 1 - frontend-dist/css/417.774caa69.css.gz | Bin 12813 -> 0 bytes .../{799.37a335d7.css => 437.391209f6.css} | 2 +- frontend-dist/css/437.391209f6.css.gz | Bin 0 -> 12306 bytes .../{322.2b40f004.css => 581.e91379d5.css} | 2 +- frontend-dist/css/581.e91379d5.css.gz | Bin 0 -> 4776 bytes .../{596.292a1dcd.css => 609.e5e9e058.css} | 2 +- ...96.292a1dcd.css.gz => 609.e5e9e058.css.gz} | Bin 15497 -> 15526 bytes frontend-dist/css/757.86e23e04.css | 1 + frontend-dist/css/757.86e23e04.css.gz | Bin 0 -> 12812 bytes frontend-dist/css/799.37a335d7.css.gz | Bin 12296 -> 0 bytes frontend-dist/css/app.228eda22.css | 1 + frontend-dist/css/app.228eda22.css.gz | Bin 0 -> 3913 bytes frontend-dist/css/app.bf217ecd.css | 1 - frontend-dist/css/app.bf217ecd.css.gz | Bin 3879 -> 0 bytes frontend-dist/index.html | 2 +- frontend-dist/index.html.gz | Bin 546 -> 544 bytes frontend-dist/js/22.755ee57d.js | 2 -- frontend-dist/js/22.755ee57d.js.gz | Bin 2757 -> 0 bytes frontend-dist/js/22.755ee57d.js.map | 1 - frontend-dist/js/22.755ee57d.js.map.gz | Bin 6771 -> 0 bytes .../js/{223.a44c93f4.js => 223.73628f82.js} | 4 ++-- frontend-dist/js/223.73628f82.js.gz | Bin 0 -> 2918 bytes ...23.a44c93f4.js.map => 223.73628f82.js.map} | 2 +- frontend-dist/js/223.73628f82.js.map.gz | Bin 0 -> 7451 bytes frontend-dist/js/223.a44c93f4.js.gz | Bin 2918 -> 0 bytes frontend-dist/js/223.a44c93f4.js.map.gz | Bin 7450 -> 0 bytes frontend-dist/js/417.f95b3308.js.gz | Bin 108374 -> 0 bytes frontend-dist/js/417.f95b3308.js.map.gz | Bin 369620 -> 0 bytes frontend-dist/js/437.fa57fedd.js | 2 ++ frontend-dist/js/437.fa57fedd.js.gz | Bin 0 -> 33797 bytes frontend-dist/js/437.fa57fedd.js.map | 1 + frontend-dist/js/437.fa57fedd.js.map.gz | Bin 0 -> 84999 bytes frontend-dist/js/540.8854b4d5.js | 2 ++ frontend-dist/js/540.8854b4d5.js.gz | Bin 0 -> 2779 bytes frontend-dist/js/540.8854b4d5.js.map | 1 + frontend-dist/js/540.8854b4d5.js.map.gz | Bin 0 -> 6765 bytes frontend-dist/js/596.aa72d40f.js | 2 -- frontend-dist/js/596.aa72d40f.js.gz | Bin 60023 -> 0 bytes frontend-dist/js/596.aa72d40f.js.map | 1 - frontend-dist/js/596.aa72d40f.js.map.gz | Bin 149930 -> 0 bytes frontend-dist/js/609.3a7a8c93.js | 2 ++ frontend-dist/js/609.3a7a8c93.js.gz | Bin 0 -> 60017 bytes frontend-dist/js/609.3a7a8c93.js.map | 1 + frontend-dist/js/609.3a7a8c93.js.map.gz | Bin 0 -> 149935 bytes .../js/{417.f95b3308.js => 757.27c783c1.js} | 6 +++--- frontend-dist/js/757.27c783c1.js.gz | Bin 0 -> 108377 bytes ...17.f95b3308.js.map => 757.27c783c1.js.map} | 2 +- frontend-dist/js/757.27c783c1.js.map.gz | Bin 0 -> 369621 bytes frontend-dist/js/799.b7d288ff.js | 2 -- frontend-dist/js/799.b7d288ff.js.gz | Bin 33774 -> 0 bytes frontend-dist/js/799.b7d288ff.js.map | 1 - frontend-dist/js/799.b7d288ff.js.map.gz | Bin 85151 -> 0 bytes frontend-dist/js/app.9b801598.js | 2 -- frontend-dist/js/app.9b801598.js.gz | Bin 26945 -> 0 bytes frontend-dist/js/app.9b801598.js.map.gz | Bin 18808 -> 0 bytes frontend-dist/js/app.d9dc13a4.js | 2 ++ frontend-dist/js/app.d9dc13a4.js.gz | Bin 0 -> 26947 bytes ...pp.9b801598.js.map => app.d9dc13a4.js.map} | 2 +- frontend-dist/js/app.d9dc13a4.js.map.gz | Bin 0 -> 18801 bytes 61 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 frontend-dist/css/322.2b40f004.css.gz delete mode 100644 frontend-dist/css/417.774caa69.css delete mode 100644 frontend-dist/css/417.774caa69.css.gz rename frontend-dist/css/{799.37a335d7.css => 437.391209f6.css} (57%) create mode 100644 frontend-dist/css/437.391209f6.css.gz rename frontend-dist/css/{322.2b40f004.css => 581.e91379d5.css} (90%) create mode 100644 frontend-dist/css/581.e91379d5.css.gz rename frontend-dist/css/{596.292a1dcd.css => 609.e5e9e058.css} (71%) rename frontend-dist/css/{596.292a1dcd.css.gz => 609.e5e9e058.css.gz} (72%) create mode 100644 frontend-dist/css/757.86e23e04.css create mode 100644 frontend-dist/css/757.86e23e04.css.gz delete mode 100644 frontend-dist/css/799.37a335d7.css.gz create mode 100644 frontend-dist/css/app.228eda22.css create mode 100644 frontend-dist/css/app.228eda22.css.gz delete mode 100644 frontend-dist/css/app.bf217ecd.css delete mode 100644 frontend-dist/css/app.bf217ecd.css.gz delete mode 100644 frontend-dist/js/22.755ee57d.js delete mode 100644 frontend-dist/js/22.755ee57d.js.gz delete mode 100644 frontend-dist/js/22.755ee57d.js.map delete mode 100644 frontend-dist/js/22.755ee57d.js.map.gz rename frontend-dist/js/{223.a44c93f4.js => 223.73628f82.js} (98%) create mode 100644 frontend-dist/js/223.73628f82.js.gz rename frontend-dist/js/{223.a44c93f4.js.map => 223.73628f82.js.map} (99%) create mode 100644 frontend-dist/js/223.73628f82.js.map.gz delete mode 100644 frontend-dist/js/223.a44c93f4.js.gz delete mode 100644 frontend-dist/js/223.a44c93f4.js.map.gz delete mode 100644 frontend-dist/js/417.f95b3308.js.gz delete mode 100644 frontend-dist/js/417.f95b3308.js.map.gz create mode 100644 frontend-dist/js/437.fa57fedd.js create mode 100644 frontend-dist/js/437.fa57fedd.js.gz create mode 100644 frontend-dist/js/437.fa57fedd.js.map create mode 100644 frontend-dist/js/437.fa57fedd.js.map.gz create mode 100644 frontend-dist/js/540.8854b4d5.js create mode 100644 frontend-dist/js/540.8854b4d5.js.gz create mode 100644 frontend-dist/js/540.8854b4d5.js.map create mode 100644 frontend-dist/js/540.8854b4d5.js.map.gz delete mode 100644 frontend-dist/js/596.aa72d40f.js delete mode 100644 frontend-dist/js/596.aa72d40f.js.gz delete mode 100644 frontend-dist/js/596.aa72d40f.js.map delete mode 100644 frontend-dist/js/596.aa72d40f.js.map.gz create mode 100644 frontend-dist/js/609.3a7a8c93.js create mode 100644 frontend-dist/js/609.3a7a8c93.js.gz create mode 100644 frontend-dist/js/609.3a7a8c93.js.map create mode 100644 frontend-dist/js/609.3a7a8c93.js.map.gz rename frontend-dist/js/{417.f95b3308.js => 757.27c783c1.js} (99%) create mode 100644 frontend-dist/js/757.27c783c1.js.gz rename frontend-dist/js/{417.f95b3308.js.map => 757.27c783c1.js.map} (99%) create mode 100644 frontend-dist/js/757.27c783c1.js.map.gz delete mode 100644 frontend-dist/js/799.b7d288ff.js delete mode 100644 frontend-dist/js/799.b7d288ff.js.gz delete mode 100644 frontend-dist/js/799.b7d288ff.js.map delete mode 100644 frontend-dist/js/799.b7d288ff.js.map.gz delete mode 100644 frontend-dist/js/app.9b801598.js delete mode 100644 frontend-dist/js/app.9b801598.js.gz delete mode 100644 frontend-dist/js/app.9b801598.js.map.gz create mode 100644 frontend-dist/js/app.d9dc13a4.js create mode 100644 frontend-dist/js/app.d9dc13a4.js.gz rename frontend-dist/js/{app.9b801598.js.map => app.d9dc13a4.js.map} (76%) create mode 100644 frontend-dist/js/app.d9dc13a4.js.map.gz diff --git a/frontend-dist/css/322.2b40f004.css.gz b/frontend-dist/css/322.2b40f004.css.gz deleted file mode 100644 index ac0224db048a6bd77131bae4fc8dafd3eb22e534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4772 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 diff --git a/frontend-dist/css/417.774caa69.css b/frontend-dist/css/417.774caa69.css deleted file mode 100644 index a0c0f12..0000000 --- a/frontend-dist/css/417.774caa69.css +++ /dev/null @@ -1 +0,0 @@ -.sidebar-container[data-v-a37302cc]{display:flex;flex-direction:column;position:fixed;top:50%;left:8px;transform:translateY(-50%);z-index:2001;max-width:200px;background:var(--glass-bg);backdrop-filter:blur(12px) saturate(1.4);-webkit-backdrop-filter:blur(12px) saturate(1.4);border:1px solid var(--glass-border);border-radius:16px;box-shadow:none;transition:width .3s ease,box-shadow .3s ease;overflow:hidden}.sidebar-container.is-collapsed[data-v-a37302cc]{width:56px}html.dark .sidebar-container[data-v-a37302cc]{background:var(--glass-bg);box-shadow:none}.sidebar-container[data-v-a37302cc]:hover,html.dark .sidebar-container[data-v-a37302cc]:hover{box-shadow:none}.menu-list[data-v-a37302cc]{padding:8px}.menu-item[data-v-a37302cc]{display:flex;align-items:center;justify-content:flex-start;padding:12px 12px 12px 0;height:42px;box-sizing:border-box;border-radius:10px;cursor:pointer;transition:background .2s ease,color .2s ease;color:var(--admin-container-color,#333);gap:0;overflow:hidden}.menu-item[data-v-a37302cc]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent)}html.dark .menu-item[data-v-a37302cc]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent)}.menu-item.is-active[data-v-a37302cc]{background:color-mix(in srgb,var(--primary-color) 20%,transparent);color:var(--primary-color)}html.dark .menu-item.is-active[data-v-a37302cc]{background:color-mix(in srgb,var(--primary-color) 30%,transparent);color:var(--el-text-color-primary)}.menu-icon[data-v-a37302cc]{width:40px;min-width:40px;font-size:16px;flex-shrink:0;text-align:center}.menu-text[data-v-a37302cc]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;opacity:1;transition:opacity .2s ease .05s,max-width .25s ease}.sidebar-container.is-collapsed .menu-text[data-v-a37302cc]{opacity:0;max-width:0;transition:opacity .1s ease,max-width .2s ease}.toggle-button[data-v-a37302cc]{padding:12px;text-align:center;cursor:pointer;transition:all .2s ease;color:var(--admin-container-color,#333)}.toggle-button[data-v-a37302cc],html.dark .toggle-button[data-v-a37302cc]{border-top:1px solid color-mix(in srgb,var(--el-text-color-primary) 8%,transparent)}.toggle-button[data-v-a37302cc]:hover,html.dark .toggle-button[data-v-a37302cc]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent)}@media (max-width:768px){.sidebar-container[data-v-a37302cc]{left:4px;max-width:170px}.sidebar-container.is-collapsed[data-v-a37302cc]{width:50px}.menu-icon[data-v-a37302cc]{width:34px;min-width:34px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.date-range-calendar[data-v-5fbe496c]{--calendar-day-size:38px;width:min(336px,100%);max-width:100%;min-width:0;box-sizing:border-box;color:var(--admin-container-color);-webkit-user-select:none;-moz-user-select:none;user-select:none}.selected-range[data-v-5fbe496c]{margin-bottom:16px}.selected-range-inputs[data-v-5fbe496c]{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px}.date-input[data-v-5fbe496c]{width:100%;min-width:0;height:34px;box-sizing:border-box;border:1px solid var(--glass-border);border-radius:8px;padding:0 8px;background:var(--glass-bg);color:var(--admin-container-color);font-size:13px;text-align:center;outline:none;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.date-input[data-v-5fbe496c]:focus,.date-input[data-v-5fbe496c]:hover{border-color:var(--el-color-primary);box-shadow:none}.date-range-separator[data-v-5fbe496c]{color:var(--el-text-color-secondary);font-size:12px;font-weight:700}.calendar-header[data-v-5fbe496c]{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;gap:8px;margin-bottom:14px}.calendar-title[data-v-5fbe496c]{text-align:center;font-size:16px;font-weight:700}.calendar-nav[data-v-5fbe496c]{width:36px;height:36px;border:1px solid var(--glass-border);border-radius:50%;background:var(--glass-bg);color:var(--admin-container-color);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .2s ease,border-color .2s ease,background-color .2s ease,box-shadow .2s ease}.calendar-nav[data-v-5fbe496c]:focus,.calendar-nav[data-v-5fbe496c]:hover{color:var(--el-color-primary);border-color:var(--el-color-primary);background:color-mix(in srgb,var(--primary-color) 8%,transparent);box-shadow:none}.calendar-grid[data-v-5fbe496c],.calendar-weekdays[data-v-5fbe496c]{display:grid;grid-template-columns:repeat(7,1fr)}.calendar-weekdays[data-v-5fbe496c]{margin-bottom:8px;color:var(--el-text-color-secondary);font-size:12px;font-weight:600;text-align:center}.calendar-weekdays span[data-v-5fbe496c]{height:24px;line-height:24px}.calendar-grid[data-v-5fbe496c]{gap:4px}.calendar-day[data-v-5fbe496c]{position:relative;width:var(--calendar-day-size);height:var(--calendar-day-size);box-sizing:border-box;justify-self:center;padding:0;border:1px solid transparent;border-radius:50%;background:transparent;color:var(--admin-container-color);font-size:14px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .18s ease,background-color .18s ease,border-color .18s ease,box-shadow .18s ease}.calendar-day[data-v-5fbe496c]:focus,.calendar-day[data-v-5fbe496c]:hover{border-color:color-mix(in srgb,var(--primary-color) 45%,transparent);background:color-mix(in srgb,var(--primary-color) 10%,transparent);color:var(--el-color-primary)}.calendar-day.is-muted[data-v-5fbe496c]{color:var(--el-text-color-placeholder);opacity:.62}.calendar-day.is-today[data-v-5fbe496c]{border-color:rgba(249,115,22,.7)}.calendar-day.is-in-range[data-v-5fbe496c]{border-radius:12px;background:color-mix(in srgb,var(--primary-color) 12%,transparent);color:var(--el-color-primary)}.calendar-day.is-range-end[data-v-5fbe496c],.calendar-day.is-range-start[data-v-5fbe496c]{background:var(--el-color-primary);border-color:var(--el-color-primary);color:#fff;box-shadow:none}html.dark .calendar-day.is-muted[data-v-5fbe496c]{color:var(--el-text-color-placeholder)}@media (max-width:768px){.date-range-calendar[data-v-5fbe496c]{--calendar-day-size:clamp(30px,8.5vw,38px)}}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.status-panel[data-v-776bcef4]{padding:20px;background:transparent;min-height:100vh}.status-hero[data-v-776bcef4]{--hero-status-color:var(--el-color-success);position:relative;isolation:isolate;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:42px;margin-bottom:8px;padding:28px 12px 34px;color:var(--admin-container-color)}.status-hero[data-v-776bcef4]:after,.status-hero[data-v-776bcef4]:before{content:"";position:absolute;pointer-events:none;z-index:-1}.status-hero[data-v-776bcef4]:before{inset:0;opacity:.34;background-image:radial-gradient(circle at 64% 52%,color-mix(in srgb,var(--primary-color) 9%,transparent),transparent 28%),linear-gradient(color-mix(in srgb,var(--primary-color) 16%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--primary-color) 16%,transparent) 1px,transparent 1px);background-size:auto,34px 34px,34px 34px;mask-image:linear-gradient(90deg,transparent 28%,#000 72%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent 28%,#000 72%,transparent)}.status-hero[data-v-776bcef4]:after{width:150px;height:150px;top:50%;right:31%;border-radius:50%;background:color-mix(in srgb,var(--primary-color) 10%,transparent);filter:blur(20px);transform:translateY(-50%)}.status-hero.is-checking[data-v-776bcef4]{--hero-status-color:var(--el-color-warning)}.status-hero.is-attention[data-v-776bcef4]{--hero-status-color:var(--el-color-danger)}.status-hero-copy[data-v-776bcef4]{position:relative;z-index:1;min-width:0}.status-hero-kicker[data-v-776bcef4]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;margin-bottom:15px}.system-health-badge[data-v-776bcef4]{display:inline-flex;align-items:center;gap:8px;padding:6px 11px;color:var(--hero-status-color);background:color-mix(in srgb,var(--hero-status-color) 10%,var(--glass-bg));border:1px solid color-mix(in srgb,var(--hero-status-color) 24%,var(--glass-border));border-radius:999px;font-size:12px;font-weight:650;line-height:1}.system-health-dot[data-v-776bcef4]{position:relative;width:7px;height:7px;flex-shrink:0;background:currentColor;border-radius:50%;box-shadow:0 0 0 4px color-mix(in srgb,currentColor 12%,transparent)}.system-health-dot[data-v-776bcef4]:after{content:"";position:absolute;inset:-4px;border:1px solid currentColor;border-radius:inherit;animation:healthPulse-776bcef4 2s ease-out infinite}.status-hero-date[data-v-776bcef4]{color:var(--el-text-color-secondary);font-size:12px;font-weight:550;line-height:1.45}.status-hero-title[data-v-776bcef4]{margin:0;color:var(--admin-container-color);font-size:clamp(28px,3vw,40px);font-weight:750;line-height:1.18;letter-spacing:-.035em}.status-hero-summary[data-v-776bcef4]{max-width:720px;margin:12px auto 0;color:var(--el-text-color-secondary);font-size:14px;line-height:1.7;text-align:center}.status-hero-time-card[data-v-776bcef4]{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:center;width:250px;min-width:250px;padding:12px 0 12px 32px;border-left:1px solid color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);box-sizing:border-box}.status-hero-time-caption[data-v-776bcef4]{color:var(--el-text-color-secondary);font-size:10px;font-weight:650;letter-spacing:.12em;text-transform:uppercase}.status-hero-time[data-v-776bcef4]{margin-top:7px;color:var(--admin-container-color);font-size:clamp(28px,3vw,36px);font-weight:750;font-variant-numeric:tabular-nums;line-height:1;letter-spacing:-.04em;white-space:nowrap}.status-hero-timezone[data-v-776bcef4]{margin-top:10px;overflow:hidden;color:var(--el-text-color-secondary);font-size:10px;line-height:1.4;opacity:.78;text-overflow:ellipsis;white-space:nowrap}@keyframes healthPulse-776bcef4{0%{opacity:.8;transform:scale(.75)}75%,to{opacity:0;transform:scale(1.8)}}@media (prefers-reduced-motion:reduce){.system-health-dot[data-v-776bcef4]:after{animation:none}}.overview-cards[data-v-776bcef4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;margin-bottom:30px}.overview-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;display:flex;align-items:center;box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);cursor:pointer;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;will-change:transform}.overview-card[data-v-776bcef4]:focus-within,.overview-card[data-v-776bcef4]:hover{transform:translateY(-5px);box-shadow:0 12px 28px color-mix(in srgb,var(--el-text-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--primary-color) 35%,var(--glass-border))}@media (prefers-reduced-motion:reduce){.overview-card[data-v-776bcef4]{transition:box-shadow .25s ease,border-color .25s ease}.overview-card[data-v-776bcef4]:focus-within,.overview-card[data-v-776bcef4]:hover{transform:none}}.card-icon[data-v-776bcef4]{width:60px;height:60px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;margin-right:20px;background:var(--primary-color);color:var(--el-color-white)}.card-content[data-v-776bcef4]{flex:1}.card-title[data-v-776bcef4]{font-size:14px;color:#666;margin-bottom:8px;font-weight:500}.card-value[data-v-776bcef4]{font-size:28px;font-weight:700;color:var(--admin-container-color);line-height:1}.card-subtitle[data-v-776bcef4]{font-size:11px;color:var(--el-text-color-secondary);margin-top:4px;opacity:.8}.charts-section[data-v-776bcef4]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-bottom:30px;overflow:visible}@media (max-width:768px){.charts-section[data-v-776bcef4]{grid-template-columns:1fr}}.chart-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;border:1px solid var(--glass-border)}.chart-card[data-v-776bcef4],.chart-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.chart-card[data-v-776bcef4],.chart-content[data-v-776bcef4],.pie-chart-container[data-v-776bcef4],.pie-chart-wrapper[data-v-776bcef4]{overflow:visible}.chart-header[data-v-776bcef4]{display:flex;gap:8px;align-items:center;margin-bottom:20px;font-size:16px;font-weight:600;color:var(--admin-container-color)}.trend-chart-card[data-v-776bcef4]{grid-column:1/-1}.trend-chart-header[data-v-776bcef4]{justify-content:space-between;gap:14px;flex-wrap:wrap}.chart-title[data-v-776bcef4]{display:flex;align-items:center;gap:8px}.trend-controls[data-v-776bcef4]{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}.trend-calendar-btn[data-v-776bcef4]{width:32px;min-width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:var(--admin-container-color);background:var(--glass-bg);border:1px solid var(--glass-border)}.trend-calendar-btn[data-v-776bcef4]:hover{color:var(--el-color-primary);border-color:var(--glass-border);background:var(--glass-bg);box-shadow:none}.trend-date-dialog[data-v-776bcef4]{overflow:visible;max-width:calc(100vw - 32px);box-sizing:border-box}.trend-date-dialog[data-v-776bcef4] .el-dialog__body{overflow:visible;padding:16px 24px 24px}.trend-date-panel[data-v-776bcef4]{width:100%;max-width:100%;min-width:0;box-sizing:border-box;display:flex;justify-content:center;overflow:hidden}.trend-group-switch[data-v-776bcef4]{flex-shrink:0;height:32px;display:flex}.trend-group-switch[data-v-776bcef4] .el-radio-button__inner{height:32px;display:inline-flex;align-items:center;justify-content:center;line-height:1;padding:0 14px}.chart-content.trend-chart-content[data-v-776bcef4]{min-height:320px;padding:0;margin:0;min-width:0;max-width:100%;overflow:hidden}.line-chart-wrapper[data-v-776bcef4]{position:relative;width:100%;max-width:100%;min-width:0;height:320px;overflow:hidden}.line-chart-wrapper[data-v-776bcef4] canvas{display:block;width:100%!important;max-width:100%!important}.trend-empty-state[data-v-776bcef4]{height:320px}.chart-content[data-v-776bcef4]{min-height:160px;padding:15px;margin:-5px}.empty-state[data-v-776bcef4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:160px;color:var(--el-text-color-secondary);font-size:14px}.empty-state .fa-icon[data-v-776bcef4]{font-size:32px;margin-bottom:10px}.stats-list[data-v-776bcef4]{display:flex;flex-direction:column;gap:16px}.stats-item[data-v-776bcef4]{display:flex;align-items:center;gap:12px}.stats-label[data-v-776bcef4]{min-width:80px;font-size:13px;color:#666;font-weight:500}.stats-bar[data-v-776bcef4]{flex:1;height:8px;background:#f0f0f0;border-radius:4px;overflow:hidden}.stats-fill[data-v-776bcef4]{height:100%;background:var(--primary-color);border-radius:4px;transition:width .6s ease}.type-fill[data-v-776bcef4]{background:#16a34a}.stats-value[data-v-776bcef4]{min-width:50px;text-align:right;font-size:13px;font-weight:600;color:var(--admin-container-color)}.pie-chart-container[data-v-776bcef4]{display:flex;align-items:center;gap:24px;flex-wrap:wrap;justify-content:center}.pie-chart-wrapper[data-v-776bcef4]{position:relative;width:180px;height:180px;flex-shrink:0;padding:15px;box-sizing:content-box;overflow:visible;isolation:isolate}.chart-center-text[data-v-776bcef4]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:-1}.center-value[data-v-776bcef4]{font-size:22px;font-weight:700;color:var(--admin-container-color);line-height:1.2}.center-label[data-v-776bcef4]{font-size:11px;color:#888;margin-top:2px}.chart-legend[data-v-776bcef4]{display:flex;flex-direction:column;gap:10px;flex:1;min-width:180px}.legend-item[data-v-776bcef4]{display:flex;align-items:center;gap:10px;padding:8px 12px;background:color-mix(in srgb,var(--el-text-color-primary) 3%,transparent);border:1px solid var(--glass-border);border-radius:8px;transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease;will-change:transform}.legend-item[data-v-776bcef4]:hover{transform:translateY(-2px);background:color-mix(in srgb,var(--primary-color) 8%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 30%,var(--glass-border));box-shadow:0 6px 16px color-mix(in srgb,var(--el-text-color-primary) 12%,transparent)}html.dark .legend-item[data-v-776bcef4]{background:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)}html.dark .legend-item[data-v-776bcef4]:hover{background:color-mix(in srgb,var(--primary-color) 12%,var(--glass-bg))}@media (prefers-reduced-motion:reduce){.legend-item[data-v-776bcef4]{transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease}.legend-item[data-v-776bcef4]:hover{transform:none}}.legend-color[data-v-776bcef4]{width:12px;height:12px;border-radius:3px;flex-shrink:0}.legend-label[data-v-776bcef4]{flex:1;font-size:13px;color:var(--admin-container-color);font-weight:500}.legend-value[data-v-776bcef4]{font-size:13px;font-weight:600;color:var(--admin-container-color);min-width:50px;text-align:right}.legend-percent[data-v-776bcef4]{font-size:12px;color:#888;min-width:40px;text-align:right}.actions-section[data-v-776bcef4]{margin-bottom:30px}.action-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;border:1px solid var(--glass-border)}.action-card[data-v-776bcef4],.action-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.action-card[data-v-776bcef4],.chart-card[data-v-776bcef4],.overview-card[data-v-776bcef4]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.action-header[data-v-776bcef4]{display:flex;align-items:center;gap:8px;margin-bottom:3px;font-size:16px;font-weight:600;color:var(--admin-container-color)}.action-content[data-v-776bcef4]{display:flex;justify-content:center;padding:20px 0}.action-buttons[data-v-776bcef4]{display:flex;gap:20px;flex-wrap:wrap;justify-content:center;align-items:center;width:100%}.action-btn[data-v-776bcef4]{border-radius:10px;padding:12px 24px;margin-left:0;font-weight:500;font-size:14px;transition:background-color .2s ease,border-color .2s ease,color .2s ease;min-width:150px;width:150px;height:48px;box-shadow:none}@media (max-width:768px){.action-btn[data-v-776bcef4]{flex:1;width:auto;min-width:0;height:auto}}.action-btn .fa-icon[data-v-776bcef4]{margin-right:8px;font-size:14px}.rebuild-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#2563eb}.rebuild-btn[data-v-776bcef4]:hover{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.backup-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#16a34a}.backup-btn[data-v-776bcef4]:hover{background:#f0fdf4;border-color:#86efac;color:#15803d}.restore-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#d97706}.restore-btn[data-v-776bcef4]:hover{background:#fffbeb;border-color:#fcd34d;color:#b45309}.dark .rebuild-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#60a5fa}.dark .rebuild-btn[data-v-776bcef4]:hover{background:rgba(59,130,246,.12);border-color:rgba(96,165,250,.4);color:#93c5fd}.dark .backup-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#4ade80}.dark .backup-btn[data-v-776bcef4]:hover{background:rgba(34,197,94,.12);border-color:rgba(74,222,128,.4);color:#86efac}.dark .restore-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#fbbf24}.dark .restore-btn[data-v-776bcef4]:hover{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.4);color:#fcd34d}.restore-section[data-v-776bcef4]{display:inline-block}@media (max-width:768px){.action-buttons>.el-tooltip[data-v-776bcef4],.action-buttons>.restore-section[data-v-776bcef4],.restore-section[data-v-776bcef4]{flex:1;width:100%}.action-btn[data-v-776bcef4]{width:100%!important;padding:10px 20px!important;box-sizing:border-box}}.file-info-section[data-v-776bcef4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;align-items:stretch}.file-info-card[data-v-776bcef4]{position:relative;background:var(--glass-bg);border-radius:16px;box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);transition:all .3s ease;height:300px;overflow:hidden;cursor:pointer}.card-bg-media[data-v-776bcef4]{position:absolute;top:0;left:0;transition:transform .5s ease;display:block}.card-bg-media[data-v-776bcef4],.card-bg-media[data-v-776bcef4] .el-image__inner{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.card-bg-media[data-v-776bcef4] .el-image__wrapper{width:100%;height:100%}.card-bg-fallback[data-v-776bcef4]{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-dashborad-stats-bg-color);display:flex;align-items:center;justify-content:center}.fallback-icon[data-v-776bcef4]{font-size:80px;color:var(--el-text-color-placeholder);opacity:.3}.file-card-header[data-v-776bcef4]{position:absolute;top:0;left:0;right:0;display:flex;gap:8px;align-items:center;padding:12px 16px;font-size:14px;font-weight:600;color:#fff;background:linear-gradient(180deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.2) 55%,transparent);z-index:2}.file-card-header .fa-icon[data-v-776bcef4]{color:#60a5fa}.file-card-header.warning .fa-icon[data-v-776bcef4]{color:#f59e0b}.info-card-footer[data-v-776bcef4]{position:absolute;bottom:0;left:0;right:0;padding:12px 16px;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);text-align:center;z-index:2}.info-card-footer .file-name[data-v-776bcef4]{font-size:14px;color:#fff;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.5)}.info-card-footer .file-meta[data-v-776bcef4]{font-size:12px;color:#fafafa;text-shadow:0 1px 2px rgba(0,0,0,.5)}@media (min-width:1200px){.file-info-card[data-v-776bcef4]{height:400px}}@media (min-width:1600px){.file-info-card[data-v-776bcef4]{height:450px}}.file-info-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.file-info-card:hover .card-bg-media[data-v-776bcef4]{transform:scale(1)}@media (max-width:768px){.status-panel[data-v-776bcef4]{padding:15px}.status-hero[data-v-776bcef4]{grid-template-columns:1fr;gap:18px;padding:24px 8px 30px}.status-hero-time-card[data-v-776bcef4]{width:100%;min-width:0;padding:18px 0 0;border-top:1px solid color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);border-left:0}.status-hero-time[data-v-776bcef4]{font-size:32px}.charts-section[data-v-776bcef4],.overview-cards[data-v-776bcef4]{grid-template-columns:1fr;gap:15px}.trend-chart-header[data-v-776bcef4]{align-items:stretch}.chart-title[data-v-776bcef4]{width:100%}.trend-controls[data-v-776bcef4]{width:100%;justify-content:stretch}.trend-date-dialog[data-v-776bcef4] .el-dialog__body{padding:12px 14px 18px}.trend-group-switch[data-v-776bcef4]{width:100%}.trend-group-switch[data-v-776bcef4] .el-radio-button{flex:1}.trend-group-switch[data-v-776bcef4] .el-radio-button__inner{width:100%;padding:0 10px}.line-chart-wrapper[data-v-776bcef4],.trend-empty-state[data-v-776bcef4]{height:280px}.file-info-section[data-v-776bcef4]{grid-template-columns:1fr;gap:15px}.card-icon[data-v-776bcef4]{width:50px;height:50px;font-size:20px;margin-right:15px}.card-value[data-v-776bcef4]{font-size:24px}.action-buttons[data-v-776bcef4]{flex-direction:column;gap:12px}.action-btn[data-v-776bcef4]{width:100%;min-width:unset}}@media (max-width:480px){.status-hero[data-v-776bcef4]{padding:21px 4px 28px}.status-hero-title[data-v-776bcef4]{font-size:27px}}.stats-fill[data-v-776bcef4]{animation:fillAnimation-776bcef4 1s ease-out}@keyframes fillAnimation-776bcef4{0%{width:0}}.progress-container[data-v-776bcef4]{width:100%;padding:20px;text-align:center}.progress-header[data-v-776bcef4]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.progress-phase[data-v-776bcef4]{font-size:16px;font-weight:600;color:var(--admin-container-color)}.progress-percentage[data-v-776bcef4]{font-size:18px;font-weight:700;color:var(--primary-color-accent)}.progress-bar[data-v-776bcef4]{margin-bottom:16px}.progress-bar[data-v-776bcef4] .el-progress-bar__outer{background-color:rgba(139,92,246,.1);border-radius:6px}.progress-bar[data-v-776bcef4] .el-progress-bar__inner{background:var(--primary-color);border-radius:6px;transition:width .3s ease}.progress-details[data-v-776bcef4]{display:flex;justify-content:center;gap:24px;margin-bottom:12px;flex-wrap:wrap}.progress-count[data-v-776bcef4],.progress-time[data-v-776bcef4]{display:flex;align-items:center;gap:6px;font-size:14px;color:#666}.progress-count .fa-icon[data-v-776bcef4],.progress-time .fa-icon[data-v-776bcef4]{color:var(--primary-color-accent);font-size:12px}.progress-message[data-v-776bcef4]{font-size:13px;color:#888;margin-bottom:16px;min-height:20px}.cancel-btn[data-v-776bcef4]{margin-top:12px;border-radius:10px;padding:10px 24px;font-weight:600;transition:all .3s cubic-bezier(.4,0,.2,1);background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.3);color:#ef4444}.cancel-btn[data-v-776bcef4]:hover{background:rgba(239,68,68,.2);border-color:rgba(239,68,68,.5);box-shadow:none}.cancel-btn .fa-icon[data-v-776bcef4]{margin-right:8px}.error-container[data-v-776bcef4]{width:100%;padding:20px;display:flex;flex-direction:column;align-items:center;gap:16px;background:rgba(239,68,68,.05);border-radius:12px;border:1px solid rgba(239,68,68,.2)}.error-icon[data-v-776bcef4]{width:48px;height:48px;border-radius:50%;background:rgba(239,68,68,.1);display:flex;align-items:center;justify-content:center;color:#ef4444;font-size:24px}.error-content[data-v-776bcef4]{text-align:center}.error-message[data-v-776bcef4]{font-size:15px;font-weight:600;color:#ef4444;margin-bottom:8px}.error-suggestion[data-v-776bcef4]{font-size:13px;color:#666}.error-actions[data-v-776bcef4]{display:flex;gap:12px}.error-actions .el-button[data-v-776bcef4]{border-radius:10px;padding:10px 24px;font-weight:600;transition:all .3s cubic-bezier(.4,0,.2,1);min-width:100px}.error-actions .el-button--primary[data-v-776bcef4]{background:var(--primary-color);border:none;color:#fff}.error-actions .el-button--primary[data-v-776bcef4]:hover{background:var(--el-color-primary-dark-2);box-shadow:none}.error-actions .el-button--default[data-v-776bcef4]{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);color:var(--el-text-color-regular)}.error-actions .el-button--default[data-v-776bcef4]:hover{background:hsla(0,0%,100%,.15);border-color:var(--glass-border-hover);box-shadow:none}.error-actions .fa-icon[data-v-776bcef4]{margin-right:8px}html.dark .progress-count[data-v-776bcef4],html.dark .progress-time[data-v-776bcef4]{color:#aaa}html.dark .progress-message[data-v-776bcef4]{color:#999}html.dark .error-container[data-v-776bcef4]{background:rgba(239,68,68,.1);border-color:rgba(239,68,68,.3)}html.dark .error-suggestion[data-v-776bcef4]{color:#aaa}@media (max-width:768px){.error-container[data-v-776bcef4],.progress-container[data-v-776bcef4]{padding:16px}.progress-header[data-v-776bcef4]{flex-direction:column;gap:8px;text-align:center}.progress-details[data-v-776bcef4]{flex-direction:column;gap:8px}.error-actions[data-v-776bcef4]{flex-direction:column;width:100%}.error-actions .el-button[data-v-776bcef4]{width:100%;margin:0}}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon,.el-input-number{display:inline-flex}.el-input-number{line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.custom-select[data-v-09c823d4]{position:relative}.custom-select-trigger[data-v-09c823d4]{display:flex;align-items:center;justify-content:space-between;height:32px;padding:0 12px;background:color-mix(in srgb,var(--el-fill-color-blank) 72%,transparent);border:1px solid var(--glass-border);border-radius:8px;cursor:pointer;transition:background-color .2s ease,border-color .2s ease;box-sizing:border-box}html.dark .custom-select-trigger[data-v-09c823d4]{background:color-mix(in srgb,var(--el-bg-color) 75%,transparent)}.custom-select-trigger[data-v-09c823d4]:hover{background:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .custom-select-trigger[data-v-09c823d4]:hover{background:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.custom-select.is-open .custom-select-trigger[data-v-09c823d4]{border-color:var(--el-color-primary)}.custom-select-value[data-v-09c823d4]{font-size:14px;color:var(--el-text-color-regular);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-select-arrow[data-v-09c823d4],.custom-select-value.is-placeholder[data-v-09c823d4]{color:var(--el-text-color-placeholder)}.custom-select-arrow[data-v-09c823d4]{font-size:12px;transition:transform .2s ease;flex-shrink:0;margin-left:8px}.custom-select.is-open .custom-select-arrow[data-v-09c823d4]{transform:rotate(180deg)}.custom-select-dropdown[data-v-09c823d4]{position:absolute;top:calc(100% + 4px);left:0;width:100%;box-sizing:border-box;padding:4px;background:var(--popper-bg-color);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--popper-shadow);z-index:2000;max-height:280px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.custom-select-option[data-v-09c823d4]{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 12px;border-radius:6px;background:transparent;font-size:14px;color:var(--el-text-color-regular);cursor:pointer;transition:background-color .2s ease,color .2s ease}.custom-select-option.is-selected[data-v-09c823d4]{color:var(--primary-color-accent);font-weight:600}.custom-select-option[data-v-09c823d4]:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent);color:var(--el-text-color-primary)}html.dark .custom-select-option[data-v-09c823d4]:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent);color:var(--el-text-color-primary)}.option-icon[data-v-09c823d4]{width:16px;height:16px;flex-shrink:0}.dropdown-fade-enter-active[data-v-09c823d4],.dropdown-fade-leave-active[data-v-09c823d4]{transition:opacity .2s ease,transform .2s ease}.dropdown-fade-enter-from[data-v-09c823d4],.dropdown-fade-leave-to[data-v-09c823d4]{opacity:0;transform:translateY(-8px)}.upload-settings[data-v-0082a519]{padding:20px;min-height:500px;overflow-x:hidden}.page-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:12px}.first-title[data-v-0082a519]{display:flex;align-items:center;gap:8px;margin:0;font-size:20px;font-weight:600}.help-icon[data-v-0082a519]{cursor:pointer;color:var(--el-text-color-secondary);font-size:14px}.inline-warning-icon[data-v-0082a519]{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-warning-icon[data-v-0082a519]:hover{color:var(--el-color-primary)}.inline-help-icon[data-v-0082a519]{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-help-icon[data-v-0082a519]:hover{color:var(--el-color-primary)}.add-btn[data-v-0082a519]{border-radius:8px;transition:background-color .2s ease,border-color .2s ease}.header-actions[data-v-0082a519]{display:flex;gap:12px}.header-actions[data-v-0082a519] .el-button{border-radius:8px}.channel-group[data-v-0082a519]{margin-bottom:32px;background:var(--glass-bg);border-radius:16px;border:1px solid var(--glass-border);overflow:hidden;box-shadow:var(--glass-shadow)}.group-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background:var(--glass-header-bg);border-bottom:1px solid var(--glass-header-border)}.group-title[data-v-0082a519]{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:600;color:var(--el-text-color-primary)}.group-icon[data-v-0082a519]{font-size:20px;color:var(--el-color-primary)}.channel-count[data-v-0082a519]{font-size:12px}.load-balance-switch[data-v-0082a519]{display:flex;align-items:center;gap:8px}.switch-label[data-v-0082a519]{font-size:13px;color:var(--el-text-color-secondary)}.channel-cards[data-v-0082a519]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;padding:20px}.channel-card[data-v-0082a519]{background:var(--glass-bg);border-radius:10px;border:1px solid var(--glass-border);overflow:hidden;position:relative;display:flex;flex-direction:column;box-shadow:var(--glass-shadow)}.channel-card[data-v-0082a519],.channel-group[data-v-0082a519]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.card-glow[data-v-0082a519]{position:absolute;width:150px;height:150px;border-radius:50%;pointer-events:none;opacity:0;transform:translate(-50%,-50%);transition:opacity .3s ease;z-index:0;background:radial-gradient(circle,rgba(56,189,248,.15) 0,transparent 70%)}.channel-card.telegram .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(84,169,235,.2) 0,transparent 70%)}.channel-card.cfr2 .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(246,130,31,.2) 0,transparent 70%)}.channel-card.s3 .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(86,154,49,.2) 0,transparent 70%)}.channel-card.discord .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(88,101,242,.2) 0,transparent 70%)}.channel-card.huggingface .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(255,210,30,.2) 0,transparent 70%)}.channel-card.webdav .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(20,184,166,.2) 0,transparent 70%)}.channel-card[data-v-0082a519]:hover{border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.channel-card.disabled[data-v-0082a519]{opacity:.6;background:var(--el-fill-color-lighter)}.card-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:var(--glass-header-bg);border-bottom:1px solid var(--glass-header-border)}.card-title[data-v-0082a519]{display:flex;align-items:center;gap:8px}.channel-name[data-v-0082a519]{font-weight:600;font-size:14px;color:var(--el-text-color-primary)}.card-body[data-v-0082a519]{padding:14px 16px;min-height:60px;text-align:left}.card-info[data-v-0082a519]{display:flex;flex-direction:column;gap:8px;align-items:flex-start;width:100%;overflow:hidden}.info-item[data-v-0082a519]{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--el-text-color-secondary);min-width:0;width:100%;max-width:100%}.info-text[data-v-0082a519]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;text-align:left}.info-icon[data-v-0082a519]{width:14px;flex-shrink:0;color:var(--el-text-color-placeholder)}.quota-mini[data-v-0082a519]{margin-top:12px;padding-top:12px;border-top:1px dashed var(--el-border-color-lighter)}.quota-mini[data-v-0082a519] .el-progress{margin-bottom:4px}.quota-text[data-v-0082a519]{font-size:11px;color:var(--el-text-color-secondary)}.card-actions[data-v-0082a519]{display:flex;justify-content:flex-end;gap:4px;padding:10px 16px;border-top:1px solid var(--glass-header-border);background:var(--glass-header-bg);margin-top:auto}.empty-tip[data-v-0082a519]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;color:var(--el-text-color-placeholder);gap:12px}.empty-icon[data-v-0082a519]{font-size:32px}.channel-warning[data-v-0082a519]{margin:0 20px 16px;padding:10px 14px;font-size:13px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);border-radius:6px;border-left:3px solid var(--el-color-warning)}.channel-type-option[data-v-0082a519]{display:inline-flex;align-items:center;gap:8px;line-height:1}.select-option-icon[data-v-0082a519]{width:16px;height:16px;font-size:16px;text-align:center}.form-warning[data-v-0082a519]{padding:10px 14px;font-size:13px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);border-radius:6px;border-left:3px solid var(--el-color-warning);margin-top:8px}.quota-status[data-v-0082a519]{width:100%}.quota-status[data-v-0082a519] .el-progress{margin-bottom:8px}.quota-info[data-v-0082a519]{font-size:13px;color:var(--el-text-color-secondary);padding:8px 12px;background:var(--el-fill-color);border:1px solid var(--glass-border);border-radius:6px}.quota-info.quota-warning[data-v-0082a519]{color:var(--el-color-danger);background:var(--el-color-danger-light-9);font-weight:500}.quota-label[data-v-0082a519]{display:inline-flex;align-items:center;gap:4px}.refresh-btn[data-v-0082a519]{padding:0!important;margin:0!important;height:auto!important;min-height:auto!important;vertical-align:middle}.refresh-btn .fa-spin[data-v-0082a519]{animation:fa-spin-0082a519 1s linear infinite}@keyframes fa-spin-0082a519{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:768px){.upload-settings[data-v-0082a519]{padding:12px}.page-header[data-v-0082a519]{flex-direction:column;align-items:flex-start}.channel-cards[data-v-0082a519]{grid-template-columns:1fr;padding:12px}.group-header[data-v-0082a519]{flex-direction:column;gap:12px;align-items:flex-start}}[data-v-0082a519] .channel-dialog{width:600px!important;max-width:90vw!important}@media (max-width:768px){[data-v-0082a519] .channel-dialog{width:90vw!important}}.el-checkbox-group{font-size:0;line-height:0}.floating-save-btn[data-v-9cef95d2]{position:fixed;right:var(--floating-btn-right,24px);bottom:var(--floating-btn-bottom,24px);display:flex;align-items:center;gap:6px;padding:10px 18px;background:var(--primary-color);color:var(--floating-btn-color);border-radius:50px;cursor:pointer;box-shadow:var(--floating-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1);z-index:100;font-weight:500;font-size:13px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.floating-save-btn[data-v-9cef95d2]:hover{box-shadow:var(--floating-btn-shadow-hover)}.floating-save-btn[data-v-9cef95d2]:active{transform:translateY(-1px);box-shadow:var(--floating-btn-shadow)}.floating-save-btn.is-loading[data-v-9cef95d2]{cursor:not-allowed;opacity:.8}.floating-save-btn.is-loading[data-v-9cef95d2]:hover{transform:none}.floating-save-btn svg[data-v-9cef95d2]{font-size:14px}.fade-up-enter-active[data-v-9cef95d2]{transition:all .3s ease-out}.fade-up-leave-active[data-v-9cef95d2]{transition:all .2s ease-in}.fade-up-enter-from[data-v-9cef95d2]{opacity:0;transform:translateY(20px)}.fade-up-leave-to[data-v-9cef95d2]{opacity:0;transform:translateY(10px)}@media (max-width:768px){.floating-save-btn[data-v-9cef95d2]{right:16px;bottom:16px;padding:10px 16px;font-size:12px}.floating-save-btn svg[data-v-9cef95d2]{font-size:12px}}@media (max-width:480px){.floating-save-btn[data-v-9cef95d2]{right:12px;bottom:12px;padding:12px;border-radius:50%}.save-text[data-v-9cef95d2]{display:none}.floating-save-btn svg[data-v-9cef95d2]{font-size:16px}}.security-settings[data-v-264510a6]{padding:20px;min-height:500px}.first-settings[data-v-264510a6]{margin-bottom:40px}.first-title[data-v-264510a6]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-264510a6]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-264510a6] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);margin-bottom:20px;box-shadow:var(--glass-shadow)}.first-settings[data-v-264510a6] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-264510a6] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-264510a6] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-264510a6] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-264510a6] .el-input,.first-settings[data-v-264510a6] .el-select{width:100%}.first-settings[data-v-264510a6] .el-switch{--el-switch-on-color:var(--el-color-primary)}.form-item-hint[data-v-264510a6]{display:inline-block;margin-left:8px;font-size:14px;color:var(--el-text-color-regular);line-height:32px;vertical-align:middle}.query-param-list[data-v-264510a6]{display:flex;flex-direction:column;gap:10px;width:100%}.query-param-row[data-v-264510a6]{display:grid;grid-template-columns:minmax(120px,1fr) minmax(160px,1.4fr) auto;gap:8px;align-items:center;width:100%}.response-field-row[data-v-264510a6]{display:grid;grid-template-columns:minmax(180px,1fr) auto auto auto;gap:4px;align-items:center;width:100%}.response-field-row[data-v-264510a6] .el-button+.el-button{margin-left:0}.token-title[data-v-264510a6]{display:flex;align-items:center;justify-content:space-between}.token-actions[data-v-264510a6]{margin-left:5px}.token-table-container[data-v-264510a6]{display:flex;justify-content:center;margin-top:20px;width:100%;overflow:hidden}.token-table[data-v-264510a6]{width:100%;border-radius:12px!important;overflow:hidden;box-shadow:var(--glass-shadow);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border)}.token-table[data-v-264510a6] .el-table__header-wrapper{border-radius:12px 12px 0 0}.token-table[data-v-264510a6] .el-table__body-wrapper{border-radius:0 0 12px 12px;background:transparent}.token-table[data-v-264510a6] .el-table{border-radius:12px;background:transparent}.token-table[data-v-264510a6] .el-table__header{background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)}.token-table[data-v-264510a6] .el-table th{background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)!important;border-bottom:1px solid var(--glass-border);text-align:center}.token-table[data-v-264510a6] .el-table td{background-color:transparent!important;border-bottom:1px solid var(--glass-border)}html.dark .token-table[data-v-264510a6] .el-table th{background-color:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)!important}html.dark .token-table[data-v-264510a6] .el-table td{border-bottom:1px solid var(--glass-border)}.token-table[data-v-264510a6] .el-table__row:hover td{background-color:color-mix(in srgb,var(--el-text-color-primary) 3%,transparent)!important}html.dark .token-table[data-v-264510a6] .el-table__row:hover td{background-color:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)!important}.token-table[data-v-264510a6] .el-table__row:last-child td{border-bottom:none}.table-cell-content[data-v-264510a6]{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:4px;padding:8px 4px;min-height:40px;text-align:center}.action-buttons[data-v-264510a6]{gap:8px}.action-button[data-v-264510a6]{margin-left:0}.permission-tag[data-v-264510a6]{margin:2px!important}.token-display[data-v-264510a6]{font-family:Courier New,monospace;background-color:var(--text-bg-color);padding:4px 8px;border-radius:6px;font-size:12px;word-break:break-all;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis}@media (max-width:768px){.security-settings[data-v-264510a6]{padding:15px;padding-bottom:80px}.first-settings[data-v-264510a6] .el-form{padding:12px 15px}.first-settings[data-v-264510a6] .el-form-item__content{max-width:100%}.query-param-row[data-v-264510a6]{grid-template-columns:1fr}.response-field-row[data-v-264510a6]{grid-template-columns:1fr auto auto auto}.token-table-container[data-v-264510a6]{padding:0 10px}.table-cell-content[data-v-264510a6]{padding:6px 2px;min-height:36px}.token-display[data-v-264510a6]{font-size:11px;padding:3px 6px}}@media (max-width:480px){.token-table-container[data-v-264510a6]{padding:0 5px}.table-cell-content[data-v-264510a6]{padding:4px 2px;min-height:32px;font-size:12px}.action-buttons .el-button[data-v-264510a6]{padding:4px 8px;font-size:12px}.permission-tag[data-v-264510a6]{font-size:11px;padding:0 4px;height:20px;line-height:20px}}.token-result[data-v-264510a6]{padding:10px 0}.token-result .el-form-item[data-v-264510a6]{margin-bottom:20px}.dialog-footer[data-v-264510a6]{display:flex;justify-content:flex-end;gap:10px}.fade-slide-enter-active[data-v-264510a6],.fade-slide-leave-active[data-v-264510a6]{transition:all .3s ease-in-out}.fade-slide-enter-from[data-v-264510a6],.fade-slide-leave-to[data-v-264510a6]{opacity:0;transform:translateY(-10px)}.fade-slide-enter-to[data-v-264510a6],.fade-slide-leave-from[data-v-264510a6]{opacity:1;transform:translateY(0)}[data-v-264510a6] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);border:1px solid var(--glass-border);box-shadow:var(--dialog-box-shadow)}.page-settings[data-v-342e4dda]{padding:20px;min-height:500px}.first-settings[data-v-342e4dda]{margin-bottom:40px}.first-title[data-v-342e4dda]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-342e4dda]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-342e4dda] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.first-settings[data-v-342e4dda] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-342e4dda] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-342e4dda] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-342e4dda] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-342e4dda] .el-form-item:has(.el-textarea) .el-form-item__content{max-width:600px}.first-settings[data-v-342e4dda] .el-input,.first-settings[data-v-342e4dda] .el-select{width:100%}.first-settings[data-v-342e4dda] .el-switch{--el-switch-on-color:var(--el-color-primary)}.announcement-manual-height[data-v-342e4dda] .el-textarea__inner{height:var(--announcement-manual-height)!important}.announcement-refresh-option[data-v-342e4dda]{width:100%;margin-top:10px;display:flex;justify-content:flex-start}.first-settings[data-v-342e4dda] .el-form-item:has(.announcement-refresh-option) .el-form-item__content{flex-direction:column;align-items:flex-start}@media (max-width:768px){.page-settings[data-v-342e4dda]{padding:15px;padding-bottom:80px}.first-settings[data-v-342e4dda] .el-form{padding:12px 15px}.first-settings[data-v-342e4dda] .el-form-item__content{max-width:100%}}.others-settings[data-v-69ae97d8]{padding:20px;min-height:500px}.first-settings[data-v-69ae97d8]{margin-bottom:40px}.first-title[data-v-69ae97d8]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-69ae97d8]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-69ae97d8] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);margin-bottom:20px;box-shadow:var(--glass-shadow)}.first-settings[data-v-69ae97d8] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-69ae97d8] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-69ae97d8] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-69ae97d8] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-69ae97d8] .el-input{width:100%}.first-settings[data-v-69ae97d8] .el-switch{--el-switch-on-color:var(--el-color-primary)}@media (max-width:768px){.others-settings[data-v-69ae97d8]{padding:15px;padding-bottom:80px}.first-settings[data-v-69ae97d8] .el-form{padding:12px 15px}.first-settings[data-v-69ae97d8] .el-form-item__content{max-width:100%}}.admin-header-content[data-v-7e9e1ae0]{display:flex;justify-content:space-between;align-items:center;min-height:45px;padding:10px 24px;position:fixed;top:8px;left:50%;width:calc(95% - 16px);z-index:2001;border:1px solid var(--glass-border);border-radius:16px;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.admin-header-content[data-v-7e9e1ae0],.admin-header-content[data-v-7e9e1ae0]:hover{background:var(--glass-bg);box-shadow:none;transform:translateX(-50%)}.header-action[data-v-7e9e1ae0],.header-content .actions[data-v-7e9e1ae0]{display:flex;align-items:center}.header-action[data-v-7e9e1ae0]{gap:10px}.header-content .actions[data-v-7e9e1ae0]{gap:15px}.header-content .actions i[data-v-7e9e1ae0],.header-icon[data-v-7e9e1ae0]{font-size:1.5em;cursor:pointer;transition:color .3s ease,transform .3s ease;color:var(--admin-container-color);outline:none}.header-content .actions .el-dropdown-link i[data-v-7e9e1ae0]:hover,.header-content .actions i[data-v-7e9e1ae0]:hover,.header-icon[data-v-7e9e1ae0]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-7e9e1ae0]{color:var(--admin-container-color)}.header-content .actions .disabled[data-v-7e9e1ae0]{color:var(--el-text-color-disabled);pointer-events:none}.header-content .actions .enabled[data-v-7e9e1ae0]{color:var(--primary-color-accent)}@media (max-width:768px){.admin-header-content[data-v-7e9e1ae0]{flex-direction:column;top:6px;width:calc(100% - 32px);padding:6px 12px;gap:4px;border-radius:14px}.header-content .actions i[data-v-7e9e1ae0],.header-icon[data-v-7e9e1ae0]{font-size:.95em}.header-content .actions[data-v-7e9e1ae0]{gap:10px;margin-top:10px}}.pagination-container[data-v-7e9e1ae0]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-7e9e1ae0]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-7e9e1ae0] .el-pagination{--el-pagination-button-bg-color:var(--glass-bg);--el-pagination-hover-color:var(--primary-color-accent)}.pagination-container[data-v-7e9e1ae0] .btn-next,.pagination-container[data-v-7e9e1ae0] .btn-prev,.pagination-container[data-v-7e9e1ae0] .el-pager li{min-width:36px;height:36px;margin:0 4px;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--el-text-color-secondary);box-shadow:none;font-weight:500;line-height:36px;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container[data-v-7e9e1ae0] .btn-next:hover,.pagination-container[data-v-7e9e1ae0] .btn-prev:hover,.pagination-container[data-v-7e9e1ae0] .el-pager li:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)}.pagination-container[data-v-7e9e1ae0] .el-pager li.is-active,.pagination-container[data-v-7e9e1ae0] .el-pager li.is-active:hover{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none!important}.pagination-right[data-v-7e9e1ae0]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-jump[data-v-7e9e1ae0],.page-total[data-v-7e9e1ae0]{color:var(--el-text-color-secondary);font-size:13px;white-space:nowrap}.page-jump[data-v-7e9e1ae0]{display:flex;align-items:center;gap:6px}.page-jump .jump-input[data-v-7e9e1ae0]{width:50px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__wrapper{height:28px;padding:0 8px;border:1px solid var(--glass-border);border-radius:8px;background-color:var(--glass-bg)!important;box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__inner{height:28px;color:var(--el-text-color-primary);line-height:28px;text-align:center}.pagination-container .refresh-btn[data-v-7e9e1ae0]{width:36px;min-width:36px;height:36px;padding:0!important;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none;font-size:14px;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .refresh-btn[data-v-7e9e1ae0]:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none}.page-jump .jump-btn[data-v-7e9e1ae0],.pagination-container .load-more[data-v-7e9e1ae0]{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none;font-weight:500;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .load-more[data-v-7e9e1ae0]{height:36px;padding:0 16px!important;border-radius:10px!important}.page-jump .jump-btn[data-v-7e9e1ae0]{height:28px;padding:0 12px!important;border-radius:8px!important;font-size:12px;font-weight:600}.page-jump .jump-btn[data-v-7e9e1ae0]:hover,.pagination-container .load-more[data-v-7e9e1ae0]:hover{border-color:var(--el-color-primary-dark-2)!important;background:var(--el-color-primary-dark-2)!important;box-shadow:none!important}@media (max-width:768px){.pagination-container[data-v-7e9e1ae0]{flex-direction:column;gap:8px;margin-top:14px;padding-bottom:10px}.pagination-center[data-v-7e9e1ae0]{flex-wrap:wrap;justify-content:center;gap:6px;order:0}.pagination-container[data-v-7e9e1ae0] .el-pager li{min-width:30px;height:30px;margin:0 2px;border-radius:8px!important;font-size:12px;line-height:30px}.pagination-container[data-v-7e9e1ae0] .btn-next,.pagination-container[data-v-7e9e1ae0] .btn-prev{display:none!important;position:static!important;min-width:30px!important;width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px}.pagination-right[data-v-7e9e1ae0]{position:static;width:100%;justify-content:center;gap:6px;order:1}.page-jump[data-v-7e9e1ae0],.page-total[data-v-7e9e1ae0]{font-size:12px}.page-jump .jump-input[data-v-7e9e1ae0]{width:40px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__wrapper{height:26px;padding:0 6px;border-radius:7px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__inner{height:26px;font-size:12px;line-height:26px}.pagination-container .refresh-btn[data-v-7e9e1ae0]{width:30px!important;min-width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px!important}.pagination-container .load-more[data-v-7e9e1ae0]{height:30px!important;min-height:30px!important;padding:0 10px!important;border-radius:8px!important;font-size:12px!important}.page-jump .jump-btn[data-v-7e9e1ae0]{height:26px;padding:0 10px!important;border-radius:7px!important;font-size:11px}}.container[data-v-7e9e1ae0]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0;overflow-x:hidden}.main-container[data-v-7e9e1ae0]{margin-top:60px;transition:margin-left .3s ease,width .3s ease;width:calc(100% - 280px);margin-left:170px}.main-container.collapsed[data-v-7e9e1ae0]{width:calc(100% - 150px);margin-left:80px}@media (max-width:768px){.main-container.collapsed[data-v-7e9e1ae0],.main-container[data-v-7e9e1ae0]{width:auto;margin-left:65px;margin-right:15px;padding:0;min-height:calc(100vh - 60px);box-sizing:border-box}} \ No newline at end of file diff --git a/frontend-dist/css/417.774caa69.css.gz b/frontend-dist/css/417.774caa69.css.gz deleted file mode 100644 index d200b967cce8e03842ef04cc9bedb464f7ed43be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12813 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 f3_`c diff --git a/frontend-dist/css/799.37a335d7.css b/frontend-dist/css/437.391209f6.css similarity index 57% rename from frontend-dist/css/799.37a335d7.css rename to frontend-dist/css/437.391209f6.css index bbda5ec..a64cf87 100644 --- a/frontend-dist/css/799.37a335d7.css +++ b/frontend-dist/css/437.391209f6.css @@ -1 +1 @@ -.history-container[data-v-7da2f8c2]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-7da2f8c2]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-7da2f8c2]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-7da2f8c2]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-7da2f8c2]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-7da2f8c2]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-7da2f8c2]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-7da2f8c2]{display:flex;gap:10px}.header-right .el-button[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-7da2f8c2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-7da2f8c2]{background:#dc2626;color:#fff}.history-content[data-v-7da2f8c2]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-7da2f8c2]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-7da2f8c2]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:1px solid var(--glass-border)}.grid-item[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-7da2f8c2]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-7da2f8c2],.grid-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-7da2f8c2]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-7da2f8c2]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-7da2f8c2]{opacity:1}.grid-actions[data-v-7da2f8c2]{display:flex;gap:15px}.grid-info[data-v-7da2f8c2]{padding:12px}.file-name[data-v-7da2f8c2]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-7da2f8c2]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-7da2f8c2]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);border:1px solid var(--glass-border);transition:all .3s ease}.list-item[data-v-7da2f8c2]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-7da2f8c2]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-7da2f8c2],.list-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-7da2f8c2]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-7da2f8c2]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-7da2f8c2]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-7da2f8c2]{display:flex;gap:8px}.empty-state[data-v-7da2f8c2]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-7da2f8c2]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-7da2f8c2]::-webkit-scrollbar{width:8px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-7da2f8c2]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-7da2f8c2]:last-child{border-left:2px solid transparent}.timeline-header[data-v-7da2f8c2]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-7da2f8c2]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:none;z-index:2;box-sizing:border-box}.date-label[data-v-7da2f8c2]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-7da2f8c2]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-7da2f8c2]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-7da2f8c2],.no-more-hint[data-v-7da2f8c2]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-7da2f8c2]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-7da2f8c2]{padding:15px 20px}.header-left h2[data-v-7da2f8c2]{font-size:20px}.history-content[data-v-7da2f8c2]{padding:15px 20px}.grid-view[data-v-7da2f8c2]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-7da2f8c2]{height:120px}.list-meta[data-v-7da2f8c2]{display:none}.list-info[data-v-7da2f8c2]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.channel-type-setting[data-v-25aa00bd]{flex-direction:column;align-items:stretch;gap:12px}.channel-type-toolbar[data-v-25aa00bd]{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.channel-visibility-filter[data-v-25aa00bd]{flex-shrink:0}.channel-visibility-filter[data-v-25aa00bd] .el-radio-button__inner{padding:6px 10px;font-size:12px}.channel-empty-state[data-v-25aa00bd]{width:100%;padding:12px;box-sizing:border-box;border:1px dashed var(--el-border-color);border-radius:8px;color:var(--el-text-color-secondary);font-size:13px;text-align:center}.radio-card-group.compact[data-v-25aa00bd]{gap:8px;width:100%}.radio-card-group.compact .radio-card[data-v-25aa00bd]{padding:8px 12px;font-size:13px}.radio-card-group.compact .radio-card[data-v-25aa00bd] .el-radio__label{display:flex;align-items:center;gap:6px}.radio-card-group.compact .channel-icon[data-v-25aa00bd]{width:18px;font-size:18px;text-align:center;flex-shrink:0}.slider-item[data-v-25aa00bd]{flex-direction:column;align-items:flex-start;gap:12px}.slider-wrapper[data-v-25aa00bd]{display:flex;align-items:center;gap:12px;width:100%}.slider-wrapper .el-slider[data-v-25aa00bd]{flex:1;min-width:0}.slider-input[data-v-25aa00bd]{width:96px!important;flex-shrink:0}.slider-input[data-v-25aa00bd] .el-input__inner{text-align:center}.slider-input-wrapper[data-v-25aa00bd]{display:flex;align-items:center;gap:6px;flex-shrink:0}.slider-unit[data-v-25aa00bd]{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.channel-type-toolbar[data-v-25aa00bd]{align-items:flex-start;flex-direction:column}.channel-visibility-filter[data-v-25aa00bd]{display:flex;width:100%}.channel-visibility-filter .el-radio-button[data-v-25aa00bd]{flex:1}.channel-visibility-filter[data-v-25aa00bd] .el-radio-button__inner,.setting-item .radio-card-group.compact[data-v-25aa00bd]{width:100%}.radio-card-group.compact[data-v-25aa00bd]{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.radio-card-group.compact .radio-card[data-v-25aa00bd]{width:100%;box-sizing:border-box;justify-content:center;flex:1}.radio-card-group.compact .radio-card[data-v-25aa00bd] .el-radio__label{justify-content:center}.slider-wrapper[data-v-25aa00bd]{gap:8px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-645a7810]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(37,99,235,.1));padding:10px 12px;border-radius:16px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-645a7810]:hover{border-color:var(--upload-list-item-hover-border,rgba(37,99,235,.25));box-shadow:none}.upload-list-item-content[data-v-645a7810]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-645a7810]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-645a7810]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-645a7810]:last-child{margin-bottom:0}.upload-list-item-url[data-v-645a7810]{display:flex;flex-direction:column}.file-icon[data-v-645a7810]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-645a7810]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,rgba(37,99,235,.05));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(37,99,235,.12));transition:all .3s ease}.upload-list-item-name-wrapper[data-v-645a7810]:hover{background:var(--file-name-hover-bg,rgba(37,99,235,.09));border-color:var(--file-name-hover-border,rgba(37,99,235,.2))}.upload-list-item-name[data-v-645a7810]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-645a7810]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,rgba(37,99,235,.04));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(37,99,235,.1))}.upload-list-item-progress[data-v-645a7810] .el-progress{--el-color-primary:var(--primary-color)}.upload-list-item-progress[data-v-645a7810] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,rgba(0,0,0,.045));box-shadow:none;overflow:hidden}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner{border-radius:8px;background:var(--primary-color)!important;box-shadow:none;position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.12);pointer-events:none}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-645a7810 1s linear infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner{background:#16a34a!important;background-size:200% 100%;box-shadow:none;animation:none}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner{background:#dc2626!important;background-size:200% 100%;box-shadow:none;animation:progressPulse-645a7810 1s ease-in-out infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-645a7810{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-645a7810{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-645a7810] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:10px;box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-645a7810] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper:hover{box-shadow:none;border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus{box-shadow:none;border-color:var(--el-color-primary)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(37,99,235,.08),transparent);animation:shimmer-645a7810 2s infinite;z-index:0}@keyframes shimmer-645a7810{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-645a7810] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-645a7810 2s ease-in-out infinite}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-645a7810{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-645a7810]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:10px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);box-shadow:var(--upload-action-btn-shadow);cursor:pointer;transition:background-color .22s ease,color .22s ease,transform .22s ease;font-size:16px;position:relative;overflow:hidden;margin:4px 0;outline:none}.modern-file-action-btn[data-v-645a7810]:before{content:"";position:absolute;inset:2px;border-radius:8px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-file-action-btn[data-v-645a7810]:hover{background:var(--upload-action-btn-hover-bg)}.modern-file-action-btn[data-v-645a7810]:hover:before{opacity:.08}.modern-file-action-btn[data-v-645a7810]:active{transform:scale(.96)}.modern-file-action-btn-primary[data-v-645a7810]{color:var(--upload-action-copy-color)}.modern-file-action-btn-danger[data-v-645a7810]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-file-action-btn-danger[data-v-645a7810]:hover{background:var(--upload-action-danger-hover-bg)}@media (max-width:768px){.upload-list-item[data-v-645a7810]{margin:5px 6px;padding:7px 8px;border-radius:12px}.upload-list-item-content[data-v-645a7810]{margin-left:2px}.upload-list-item-action[data-v-645a7810]{gap:3px}.upload-list-item-url-row[data-v-645a7810]{width:42vw;flex-direction:column;gap:4px;margin-bottom:4px}.upload-list-item-progress[data-v-645a7810]{width:32vw;margin-top:5px;padding:2px 5px;border-radius:9px}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:6px!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:7px}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:10px;padding-left:8px}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{font-size:9px;padding:0 6px;border-radius:7px 0 0 7px}.modern-file-action-btn[data-v-645a7810]{width:26px;height:26px;margin:2px 0;border-radius:8px;font-size:12px}.upload-list-item-name-wrapper[data-v-645a7810]{padding:3px 8px;margin-bottom:5px;border-radius:7px}.upload-list-item-name[data-v-645a7810]{font-size:11px;width:32vw}}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-a42a2866{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-a42a2866]{--upload-card-height:45vh;--upload-card-busy-height:17vh;--upload-list-height:7vh;--upload-list-inner-height:var(--upload-list-height);--upload-list-busy-height:calc(var(--upload-card-height) - var(--upload-card-busy-height) + var(--upload-list-height));--upload-list-gap:10px;--upload-list-radius:15px;--upload-card-vertical-padding:40px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;height:calc(var(--upload-card-height) + var(--upload-list-height) + var(--upload-list-gap) + var(--upload-card-vertical-padding))}.upload-list-card[data-v-a42a2866]{width:55vw;height:var(--upload-list-height);margin-top:var(--upload-list-gap);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--upload-list-radius);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-a42a2866] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-a42a2866]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-a42a2866]{width:70vw}}.upload-list-card.upload-list-busy[data-v-a42a2866]{height:var(--upload-list-busy-height)}.upload-list-card[data-v-a42a2866]:not(.upload-list-busy) .el-scrollbar__view{height:100%}.upload-card-wrapper[data-v-a42a2866]{position:relative;overflow:visible}.folder-upload-input[data-v-a42a2866]{display:none}.clipboard-paste-receiver[data-v-a42a2866]{position:fixed;top:0;left:-9999px;width:1px;height:1px;padding:0;border:0;opacity:0;pointer-events:none}.upload-prompt-row[data-v-a42a2866]{display:flex;align-items:center;justify-content:center;gap:6px;max-width:calc(100% - 24px);min-width:0}.folder-upload-icon-button[data-v-a42a2866]{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:28px;height:28px;box-sizing:border-box;padding:0;border:none;border-radius:7px;background:transparent;color:var(--el-text-color-secondary);line-height:1;cursor:pointer;transition:color .2s ease,background-color .2s ease}.folder-upload-icon-button[data-v-a42a2866] svg{display:block;width:15px;height:15px;transform:translateY(1px)}.folder-upload-icon-button[data-v-a42a2866]:hover{color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 12%,transparent)}.folder-upload-icon-button[data-v-a42a2866]:focus-visible{outline:none;color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 12%,transparent)}.folder-upload-icon-button.upload-list-busy[data-v-a42a2866]{width:24px;height:24px;border-radius:7px}.folder-upload-icon-button.upload-list-busy[data-v-a42a2866] svg{width:13px;height:13px}@media (max-width:768px){.upload-prompt-row[data-v-a42a2866]{gap:2px;max-width:calc(100% - 12px)}.folder-upload-icon-button[data-v-a42a2866]{width:22px;height:22px;border-radius:6px}.folder-upload-icon-button.upload-list-busy[data-v-a42a2866]{width:20px;height:20px}.folder-upload-icon-button[data-v-a42a2866] svg{width:12px;height:12px;transform:none}.folder-upload-icon-button.upload-list-busy[data-v-a42a2866] svg{width:11px;height:11px}}.upload-card-glow[data-v-a42a2866]{position:absolute;width:200px;height:200px;border-radius:50%;background:var(--upload-card-hover-glow-bg);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-a42a2866]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-a42a2866]{width:70vw}}.upload-card-busy[data-v-a42a2866] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-a42a2866] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:1px solid var(--glass-border);opacity:.7;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);transition:height .3s ease,opacity .25s ease,border-color .25s ease,box-shadow .25s ease,background-color .25s ease}[data-v-a42a2866] .el-upload:focus .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-a42a2866] .el-upload-dragger.is-dragover,[data-v-a42a2866] .el-upload-dragger:hover{opacity:.7;box-shadow:var(--glass-shadow)}.is-uploading[data-v-a42a2866] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-a42a2866]{position:relative;background:none}.upload-card.is-uploading[data-v-a42a2866]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-a42a2866 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-a42a2866]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.el-upload__text.upload-list-busy[data-v-a42a2866]{font-size:small}@media (max-width:768px){.el-upload__text.upload-list-busy[data-v-a42a2866],.el-upload__text[data-v-a42a2866]{font-size:12px}}.el-icon--upload[data-v-a42a2866]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-a42a2866]{color:#6b6b73}.el-upload__text[data-v-a42a2866] em{color:#1d4ed8}html.dark .el-upload__text[data-v-a42a2866] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-a42a2866]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-a42a2866]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-a42a2866]{font-size:30px}}.paste-card[data-v-a42a2866]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-a42a2866]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-a42a2866]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-a42a2866]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-a42a2866 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-a42a2866] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-a42a2866]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-a42a2866]{width:50vw;height:70%;border-radius:16px;background:color-mix(in srgb,var(--primary-color) 4%,var(--glass-bg));border:1px solid var(--glass-border);box-shadow:none;transition:background-color .22s ease,border-color .22s ease,box-shadow .22s ease;box-sizing:border-box;display:flex;position:relative;overflow:hidden}.upload-card-busy .upload-card-textarea[data-v-a42a2866]{height:50%}.upload-card-textarea[data-v-a42a2866]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-a42a2866]:focus-within{background:color-mix(in srgb,var(--primary-color) 7%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 45%,var(--glass-border));box-shadow:none}.upload-card-textarea[data-v-a42a2866] .el-textarea__inner{border-radius:16px;background:transparent;transition:color .2s ease,background-color .2s ease;resize:none;border:none;box-shadow:none!important;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}.upload-card-textarea[data-v-a42a2866] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-a42a2866] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-a42a2866] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-a42a2866] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-a42a2866] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-a42a2866] ::-webkit-scrollbar-thumb{background:rgba(37,99,235,.5);border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-a42a2866] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-a42a2866]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-a42a2866]{min-width:92px;height:38px;border-radius:10px!important;font-weight:600;font-size:14px;letter-spacing:.04em;color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 10%,transparent)!important;border:1px solid color-mix(in srgb,var(--primary-color) 36%,var(--glass-border))!important;box-shadow:none;transition:background-color .2s ease,border-color .2s ease,transform .2s ease!important}.paste-card-upload-button[data-v-a42a2866]:hover{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;transform:translateY(-1px);box-shadow:none}.paste-card-upload-button[data-v-a42a2866]:focus-visible{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 14%,transparent)!important}.paste-card-upload-button[data-v-a42a2866]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-a42a2866]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-a42a2866]{margin-top:10px}.paste-card-method-group[data-v-a42a2866]{position:relative;display:inline-flex;align-items:center;width:158px;height:38px;box-sizing:border-box;gap:2px;padding:3px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;overflow:hidden}.paste-card-method-group[data-v-a42a2866]:before{content:"";position:absolute;top:3px;left:3px;width:calc(50% - 4px);height:calc(100% - 6px);border-radius:7px;background:color-mix(in srgb,var(--primary-color) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--primary-color) 42%,var(--glass-border)) inset;transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.paste-card-method-group.is-external[data-v-a42a2866]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-a42a2866]{position:relative;z-index:1;display:inline-flex;flex:1 1 0;align-items:center;justify-content:center;min-width:0;height:30px;box-sizing:border-box;padding:0 14px;border:none;border-radius:7px;background:transparent;font-weight:500;font-size:13px;line-height:1;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.paste-card-method-button.is-active[data-v-a42a2866],.paste-card-method-button[data-v-a42a2866]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-a42a2866]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-a42a2866]{height:var(--upload-card-height);min-height:0;max-height:var(--upload-card-height);padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-a42a2866]{height:var(--upload-card-busy-height);min-height:0;max-height:var(--upload-card-busy-height);padding:5px}.upload-card-textarea[data-v-a42a2866]{margin-top:4px;width:calc(100% - 4px)!important;min-height:0;flex-shrink:1}.upload-card-textarea[data-v-a42a2866] .el-textarea__inner{height:100%;min-height:0!important;box-sizing:border-box;border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-a42a2866]{flex:0 0 auto;width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-a42a2866]{letter-spacing:.02em;padding:0 10px}.paste-card-upload-button[data-v-a42a2866],.upload-card-busy .paste-card-upload-button[data-v-a42a2866]{height:28px;min-width:56px;border-radius:7px!important;font-size:11px}.upload-card-busy .paste-card-actions[data-v-a42a2866]{margin-top:6px}.paste-card-method-group[data-v-a42a2866]{width:112px;height:28px;padding:2px;border-radius:8px}.paste-card-method-group[data-v-a42a2866]:before{top:2px;left:2px;width:calc(50% - 3px);height:calc(100% - 4px);border-radius:6px}.paste-card-method-button[data-v-a42a2866]{height:22px;padding:0 8px;font-size:10px;border-radius:6px}}.upload-list-dashboard[data-v-a42a2866]{display:flex;justify-content:space-between;align-items:center;height:var(--upload-list-inner-height);padding:0 15px;box-sizing:border-box;width:100%;min-width:0;position:sticky;top:0;z-index:1;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:var(--upload-list-radius);box-shadow:var(--glass-shadow);opacity:.7}.upload-list-card:not(.upload-list-busy) .upload-list-dashboard[data-v-a42a2866]{height:100%}[data-v-a42a2866] .el-upload-dragger{position:relative;overflow:hidden}[data-v-a42a2866] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:200px 200px}[data-v-a42a2866] .el-upload-dragger:after,[data-v-a42a2866] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-a42a2866] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-a42a2866]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-a42a2866 60s linear infinite}.upload-card[data-v-a42a2866]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-a42a2866 40s linear infinite,starPulse-a42a2866 4s ease-in-out infinite}@keyframes starScroll-a42a2866{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-a42a2866{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-a42a2866]{display:flex;align-items:center;gap:5px;height:44px;box-sizing:border-box;padding:5px;background:var(--glass-bg);border-radius:12px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-group[data-v-a42a2866]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-a42a2866]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:13px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);cursor:pointer;transition:background-color .22s ease,color .22s ease,box-shadow .22s ease,transform .22s ease;font-size:14px;box-shadow:var(--upload-action-btn-shadow);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-a42a2866]:focus,.modern-action-btn[data-v-a42a2866]:focus-visible{outline:none!important}.modern-action-btn[data-v-a42a2866]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-a42a2866]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-a42a2866]:hover:before{opacity:.08}.modern-action-btn[data-v-a42a2866]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-a42a2866]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-a42a2866]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-a42a2866]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-a42a2866]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-a42a2866]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-a42a2866]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-a42a2866]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;height:44px;box-sizing:border-box;padding:0 14px;background:var(--dashboard-title-bg,rgba(37,99,235,.06));border:none;border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-a42a2866]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-a42a2866]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-a42a2866]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-a42a2866]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-a42a2866]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-a42a2866]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-a42a2866]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-a42a2866]{flex-shrink:0}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-28b8eda7]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-28b8eda7]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-28b8eda7]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-28b8eda7]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-28b8eda7]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-e9449eac]{border:1px solid var(--glass-border);box-sizing:border-box;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:12px;background-color:var(--glass-bg);box-shadow:none;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}#themeToggle[data-v-e9449eac]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-e9449eac]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-e9449eac]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-e9449eac]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-e9449eac]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-e9449eac]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-e9449eac]{transform:rotate(40deg)}.theme_toggle_g[data-v-e9449eac]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-e9449eac],.icon-fade-leave-active[data-v-e9449eac]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-e9449eac]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-e9449eac]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-e9449eac],.icon-fade-leave-from[data-v-e9449eac]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-e9449eac]{display:inline-block}.container[data-v-15adb2dc]{background:var(--bg-color);min-height:100vh}.rotate[data-v-15adb2dc]{animation:spin-15adb2dc 2s ease-in-out}.scale[data-v-15adb2dc]{animation:scale-15adb2dc .5s ease-in-out}@keyframes spin-15adb2dc{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-15adb2dc{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-15adb2dc{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-15adb2dc{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-15adb2dc{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-15adb2dc]{display:inline-block}.mobile-only[data-v-15adb2dc]{display:none}@media (max-width:768px){.desktop-only[data-v-15adb2dc]{display:none!important}.mobile-only[data-v-15adb2dc]{display:flex!important}}.toggle-dark-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;border-radius:12px;position:fixed;top:30px;right:80px;padding:0}.more-dropdown[data-v-15adb2dc]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none;padding:0}@media (max-width:768px){.upload-method-button[data-v-15adb2dc]{width:2rem;height:2rem}}.upload-method-icon[data-v-15adb2dc]{outline:none}.more-button .svg-inline--fa[data-v-15adb2dc],.upload-method-button .svg-inline--fa[data-v-15adb2dc]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-15adb2dc]{font-size:1.2em}.mobile-more-dropdown[data-v-15adb2dc]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-15adb2dc]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-15adb2dc]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-15adb2dc]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-15adb2dc],.upload-folder-container[data-v-15adb2dc]{right:58px}}.upload-folder[data-v-15adb2dc]{width:100px;height:2.5rem;border-radius:12px;display:flex;align-items:center;box-sizing:border-box;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-15adb2dc]{width:200px}@media (max-width:768px){.upload-folder[data-v-15adb2dc]{width:80px;height:2rem}.upload-folder.active[data-v-15adb2dc]{width:120px}}.directory-tree-trigger[data-v-15adb2dc]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;box-sizing:border-box;border:1px solid var(--glass-border);margin-left:10px;background-color:var(--glass-bg);box-shadow:var(--glass-shadow);color:var(--theme-toggle-color);border-radius:12px;outline:none;cursor:pointer;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}.directory-tree-trigger[data-v-15adb2dc]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-15adb2dc]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-15adb2dc]{font-size:1.1em}}.upload-folder[data-v-15adb2dc] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-15adb2dc] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-15adb2dc] .el-input__wrapper{border-radius:12px;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);height:100%;padding:0 10px;box-sizing:border-box;transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease!important}.upload-folder[data-v-15adb2dc] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-15adb2dc] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.upload-folder[data-v-15adb2dc] .el-input__wrapper.is-focus,.upload-folder[data-v-15adb2dc] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-15adb2dc]{--quick-toolbar-size:2.5rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 6px);position:fixed;bottom:50px;right:30px;width:var(--quick-toolbar-size);box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:0;z-index:200;padding:3px;border-radius:999px;border:1px solid var(--glass-border);background-color:var(--glass-bg);box-shadow:none;transition:background-color .24s ease,border-color .24s ease}.directory-tree-trigger[data-v-15adb2dc],.mobile-more-button[data-v-15adb2dc],.more-dropdown .more-button[data-v-15adb2dc],.quick-toolbar[data-v-15adb2dc],.toggle-dark-button[data-v-15adb2dc],.upload-method-button[data-v-15adb2dc]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-15adb2dc]{width:var(--quick-toolbar-button-size);height:var(--quick-toolbar-button-size);border:none;transition:transform .22s ease,background-color .22s ease,box-shadow .22s ease,color .22s ease;margin-left:0;padding:0;border-radius:999px;background-color:transparent;box-shadow:none;color:var(--toolbar-button-color);outline:none}.quick-toolbar-actions[data-v-15adb2dc]{display:grid;grid-template-rows:0fr;width:100%;margin-bottom:0;opacity:0;pointer-events:none;transform:translateY(12px);transform-origin:bottom center;transition:grid-template-rows .52s cubic-bezier(.16,1,.3,1),margin-bottom .52s cubic-bezier(.16,1,.3,1),opacity .32s ease,transform .52s cubic-bezier(.16,1,.3,1)}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-15adb2dc]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-15adb2dc]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-15adb2dc]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-15adb2dc]{margin-top:4px}.quick-toolbar-icon[data-v-15adb2dc]{font-size:16px}.quick-toolbar-toggle-icon[data-v-15adb2dc]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-15adb2dc]{transform:rotate(0deg)}.info-container[data-v-15adb2dc]:hover,.quick-toolbar-button[data-v-15adb2dc]:hover{transform:scale(1.05);background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.quick-toolbar[data-v-15adb2dc]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-15adb2dc]:hover{transform:none}.toggle-dark-button[data-v-15adb2dc]:hover,.upload-method-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-15adb2dc]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-15adb2dc]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}@media (max-width:768px){.quick-toolbar[data-v-15adb2dc]{--quick-toolbar-size:2rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 4px);right:18px;bottom:max(72px,calc(6vh + 20px + env(safe-area-inset-bottom)));padding:2px}.quick-toolbar-actions[data-v-15adb2dc]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-15adb2dc]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-15adb2dc]{gap:2px}.quick-toolbar-more[data-v-15adb2dc]{margin-top:3px}.quick-toolbar-icon[data-v-15adb2dc]{font-size:14px}}[data-v-15adb2dc] .el-dialog{border-radius:12px;border:1px solid var(--glass-border);background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-15adb2dc]{display:flex;justify-content:center;margin-top:20px}.header[data-v-15adb2dc]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-15adb2dc]{font-size:2.25rem;font-weight:400;font-family:Pacifico,Noto Sans SC,sans-serif;color:var(--upload-title-text-color);text-shadow:var(--upload-title-text-shadow);position:relative;padding-bottom:8px;cursor:pointer;transition:transform .4s cubic-bezier(.4,0,.2,1),filter .25s ease;animation:float-15adb2dc 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-15adb2dc]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-15adb2dc]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:var(--upload-title-underline-bg);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:var(--upload-title-underline-shadow)}.title[data-v-15adb2dc]:hover:after{width:80%}.main-title[data-v-15adb2dc]{color:var(--upload-main-title-color);text-decoration:none;display:inline-block;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3));transition:opacity .16s ease}.title:hover .main-title[data-v-15adb2dc]{opacity:0}.title[data-v-15adb2dc]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-15adb2dc]{position:absolute;left:50%;top:-1px;z-index:2;width:-moz-max-content;width:max-content;pointer-events:none;white-space:nowrap;color:var(--upload-title-crayon-deep,#1d2129);opacity:0;-webkit-text-stroke:.35px var(--upload-title-crayon-edge);text-shadow:-1.2px .4px 0 var(--upload-title-crayon-burr),.9px -.7px 0 hsla(0,0%,100%,.24),1.5px .5px 0 var(--upload-title-crayon-dust),-1.7px -.6px 0 var(--upload-title-crayon-dust);transform:translateX(-50%) rotate(-.8deg);transform-origin:left 68%;clip-path:inset(-10px 100% -10px -10px);filter:saturate(1.08) contrast(1.06)}.title:hover .title-crayon-text[data-v-15adb2dc]{animation:crayonWrite-15adb2dc .82s steps(18) forwards,crayonScratch-15adb2dc .16s steps(2) .82s 3}@keyframes float-15adb2dc{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-15adb2dc{0%{opacity:0;clip-path:inset(-10px 100% -10px -10px)}12%{opacity:.92}32%{clip-path:inset(-10px 68% -10px -10px)}47%{clip-path:inset(-10px 52% -10px -10px)}63%{clip-path:inset(-10px 34% -10px -10px)}78%{clip-path:inset(-10px 18% -10px -10px)}to{opacity:.92;clip-path:inset(-10px -10px -10px -10px)}}@keyframes crayonScratch-15adb2dc{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-15adb2dc]{font-size:1.4rem;letter-spacing:.75px}.title[data-v-15adb2dc]:hover{transform:scale(1.05)}}.upload-home[data-v-15adb2dc]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-15adb2dc]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-15adb2dc]{padding:5px 15px 2px;top:-2.5vh}.title[data-v-15adb2dc]{margin:.4em 0;padding-bottom:3px;line-height:1.2}.upload[data-v-15adb2dc]{top:-3.8vh}}.footer[data-v-15adb2dc]{height:6vh} \ No newline at end of file +.history-container[data-v-7da2f8c2]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-7da2f8c2]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-7da2f8c2]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-7da2f8c2]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-7da2f8c2]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-7da2f8c2]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-7da2f8c2]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-7da2f8c2]{display:flex;gap:10px}.header-right .el-button[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-7da2f8c2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-7da2f8c2]{background:#dc2626;color:#fff}.history-content[data-v-7da2f8c2]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-7da2f8c2]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-7da2f8c2]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:1px solid var(--glass-border)}.grid-item[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-7da2f8c2]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-7da2f8c2],.grid-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-7da2f8c2]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-7da2f8c2]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-7da2f8c2]{opacity:1}.grid-actions[data-v-7da2f8c2]{display:flex;gap:15px}.grid-info[data-v-7da2f8c2]{padding:12px}.file-name[data-v-7da2f8c2]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-7da2f8c2]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-7da2f8c2]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);border:1px solid var(--glass-border);transition:all .3s ease}.list-item[data-v-7da2f8c2]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-7da2f8c2]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-7da2f8c2],.list-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-7da2f8c2]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-7da2f8c2]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-7da2f8c2]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-7da2f8c2]{display:flex;gap:8px}.empty-state[data-v-7da2f8c2]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-7da2f8c2]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-7da2f8c2]::-webkit-scrollbar{width:8px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-7da2f8c2]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-7da2f8c2]:last-child{border-left:2px solid transparent}.timeline-header[data-v-7da2f8c2]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-7da2f8c2]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:none;z-index:2;box-sizing:border-box}.date-label[data-v-7da2f8c2]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-7da2f8c2]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-7da2f8c2]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-7da2f8c2],.no-more-hint[data-v-7da2f8c2]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-7da2f8c2]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-7da2f8c2]{padding:15px 20px}.header-left h2[data-v-7da2f8c2]{font-size:20px}.history-content[data-v-7da2f8c2]{padding:15px 20px}.grid-view[data-v-7da2f8c2]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-7da2f8c2]{height:120px}.list-meta[data-v-7da2f8c2]{display:none}.list-info[data-v-7da2f8c2]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.channel-type-setting[data-v-25aa00bd]{flex-direction:column;align-items:stretch;gap:12px}.channel-type-toolbar[data-v-25aa00bd]{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.channel-visibility-filter[data-v-25aa00bd]{flex-shrink:0}.channel-visibility-filter[data-v-25aa00bd] .el-radio-button__inner{padding:6px 10px;font-size:12px}.channel-empty-state[data-v-25aa00bd]{width:100%;padding:12px;box-sizing:border-box;border:1px dashed var(--el-border-color);border-radius:8px;color:var(--el-text-color-secondary);font-size:13px;text-align:center}.radio-card-group.compact[data-v-25aa00bd]{gap:8px;width:100%}.radio-card-group.compact .radio-card[data-v-25aa00bd]{padding:8px 12px;font-size:13px}.radio-card-group.compact .radio-card[data-v-25aa00bd] .el-radio__label{display:flex;align-items:center;gap:6px}.radio-card-group.compact .channel-icon[data-v-25aa00bd]{width:18px;font-size:18px;text-align:center;flex-shrink:0}.slider-item[data-v-25aa00bd]{flex-direction:column;align-items:flex-start;gap:12px}.slider-wrapper[data-v-25aa00bd]{display:flex;align-items:center;gap:12px;width:100%}.slider-wrapper .el-slider[data-v-25aa00bd]{flex:1;min-width:0}.slider-input[data-v-25aa00bd]{width:96px!important;flex-shrink:0}.slider-input[data-v-25aa00bd] .el-input__inner{text-align:center}.slider-input-wrapper[data-v-25aa00bd]{display:flex;align-items:center;gap:6px;flex-shrink:0}.slider-unit[data-v-25aa00bd]{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.channel-type-toolbar[data-v-25aa00bd]{align-items:flex-start;flex-direction:column}.channel-visibility-filter[data-v-25aa00bd]{display:flex;width:100%}.channel-visibility-filter .el-radio-button[data-v-25aa00bd]{flex:1}.channel-visibility-filter[data-v-25aa00bd] .el-radio-button__inner,.setting-item .radio-card-group.compact[data-v-25aa00bd]{width:100%}.radio-card-group.compact[data-v-25aa00bd]{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.radio-card-group.compact .radio-card[data-v-25aa00bd]{width:100%;box-sizing:border-box;justify-content:center;flex:1}.radio-card-group.compact .radio-card[data-v-25aa00bd] .el-radio__label{justify-content:center}.slider-wrapper[data-v-25aa00bd]{gap:8px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-645a7810]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(37,99,235,.1));padding:10px 12px;border-radius:16px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-645a7810]:hover{border-color:var(--upload-list-item-hover-border,rgba(37,99,235,.25));box-shadow:none}.upload-list-item-content[data-v-645a7810]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-645a7810]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-645a7810]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-645a7810]:last-child{margin-bottom:0}.upload-list-item-url[data-v-645a7810]{display:flex;flex-direction:column}.file-icon[data-v-645a7810]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-645a7810]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,rgba(37,99,235,.05));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(37,99,235,.12));transition:all .3s ease}.upload-list-item-name-wrapper[data-v-645a7810]:hover{background:var(--file-name-hover-bg,rgba(37,99,235,.09));border-color:var(--file-name-hover-border,rgba(37,99,235,.2))}.upload-list-item-name[data-v-645a7810]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-645a7810]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,rgba(37,99,235,.04));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(37,99,235,.1))}.upload-list-item-progress[data-v-645a7810] .el-progress{--el-color-primary:var(--primary-color)}.upload-list-item-progress[data-v-645a7810] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,rgba(0,0,0,.045));box-shadow:none;overflow:hidden}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner{border-radius:8px;background:var(--primary-color)!important;box-shadow:none;position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.12);pointer-events:none}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-645a7810 1s linear infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner{background:#16a34a!important;background-size:200% 100%;box-shadow:none;animation:none}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner{background:#dc2626!important;background-size:200% 100%;box-shadow:none;animation:progressPulse-645a7810 1s ease-in-out infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-645a7810{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-645a7810{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-645a7810] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:10px;box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-645a7810] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper:hover{box-shadow:none;border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus{box-shadow:none;border-color:var(--el-color-primary)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(37,99,235,.08),transparent);animation:shimmer-645a7810 2s infinite;z-index:0}@keyframes shimmer-645a7810{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-645a7810] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-645a7810 2s ease-in-out infinite}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-645a7810{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-645a7810]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:10px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);box-shadow:var(--upload-action-btn-shadow);cursor:pointer;transition:background-color .22s ease,color .22s ease,transform .22s ease;font-size:16px;position:relative;overflow:hidden;margin:4px 0;outline:none}.modern-file-action-btn[data-v-645a7810]:before{content:"";position:absolute;inset:2px;border-radius:8px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-file-action-btn[data-v-645a7810]:hover{background:var(--upload-action-btn-hover-bg)}.modern-file-action-btn[data-v-645a7810]:hover:before{opacity:.08}.modern-file-action-btn[data-v-645a7810]:active{transform:scale(.96)}.modern-file-action-btn-primary[data-v-645a7810]{color:var(--upload-action-copy-color)}.modern-file-action-btn-danger[data-v-645a7810]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-file-action-btn-danger[data-v-645a7810]:hover{background:var(--upload-action-danger-hover-bg)}@media (max-width:768px){.upload-list-item[data-v-645a7810]{margin:5px 6px;padding:7px 8px;border-radius:12px}.upload-list-item-content[data-v-645a7810]{margin-left:2px}.upload-list-item-action[data-v-645a7810]{gap:3px}.upload-list-item-url-row[data-v-645a7810]{width:42vw;flex-direction:column;gap:4px;margin-bottom:4px}.upload-list-item-progress[data-v-645a7810]{width:32vw;margin-top:5px;padding:2px 5px;border-radius:9px}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:6px!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:7px}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:10px;padding-left:8px}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{font-size:9px;padding:0 6px;border-radius:7px 0 0 7px}.modern-file-action-btn[data-v-645a7810]{width:26px;height:26px;margin:2px 0;border-radius:8px;font-size:12px}.upload-list-item-name-wrapper[data-v-645a7810]{padding:3px 8px;margin-bottom:5px;border-radius:7px}.upload-list-item-name[data-v-645a7810]{font-size:11px;width:32vw}}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-0fa6b946{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-0fa6b946]{--upload-card-height:45vh;--upload-card-busy-height:17vh;--upload-list-height:7vh;--upload-list-inner-height:var(--upload-list-height);--upload-list-busy-height:calc(var(--upload-card-height) - var(--upload-card-busy-height) + var(--upload-list-height));--upload-list-gap:10px;--upload-list-radius:15px;--upload-card-vertical-padding:40px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;height:calc(var(--upload-card-height) + var(--upload-list-height) + var(--upload-list-gap) + var(--upload-card-vertical-padding))}.upload-list-card[data-v-0fa6b946]{width:55vw;height:var(--upload-list-height);margin-top:var(--upload-list-gap);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--upload-list-radius);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-0fa6b946] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-0fa6b946]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-0fa6b946]{width:70vw}}.upload-list-card.upload-list-busy[data-v-0fa6b946]{height:var(--upload-list-busy-height)}.upload-list-card[data-v-0fa6b946]:not(.upload-list-busy) .el-scrollbar__view{height:100%}.upload-card-wrapper[data-v-0fa6b946]{position:relative;overflow:visible}.folder-upload-input[data-v-0fa6b946]{display:none}.clipboard-paste-receiver[data-v-0fa6b946]{position:fixed;top:0;left:-9999px;width:1px;height:1px;padding:0;border:0;opacity:0;pointer-events:none}.upload-prompt-row[data-v-0fa6b946]{display:flex;align-items:center;justify-content:center;gap:6px;max-width:calc(100% - 24px);min-width:0}.folder-upload-icon-button[data-v-0fa6b946]{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:28px;height:28px;box-sizing:border-box;padding:0;border:none;border-radius:7px;background:transparent;color:var(--el-text-color-secondary);line-height:1;cursor:pointer;transition:color .2s ease,background-color .2s ease}.folder-upload-icon-button[data-v-0fa6b946] svg{display:block;width:15px;height:15px;transform:translateY(1px)}.folder-upload-icon-button[data-v-0fa6b946]:hover{color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 12%,transparent)}.folder-upload-icon-button[data-v-0fa6b946]:focus-visible{outline:none;color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 12%,transparent)}.folder-upload-icon-button.upload-list-busy[data-v-0fa6b946]{width:24px;height:24px;border-radius:7px}.folder-upload-icon-button.upload-list-busy[data-v-0fa6b946] svg{width:13px;height:13px}@media (max-width:768px){.upload-prompt-row[data-v-0fa6b946]{gap:2px;max-width:calc(100% - 12px)}.folder-upload-icon-button[data-v-0fa6b946]{width:22px;height:22px;border-radius:6px}.folder-upload-icon-button.upload-list-busy[data-v-0fa6b946]{width:20px;height:20px}.folder-upload-icon-button[data-v-0fa6b946] svg{width:12px;height:12px;transform:none}.folder-upload-icon-button.upload-list-busy[data-v-0fa6b946] svg{width:11px;height:11px}}.upload-card-glow[data-v-0fa6b946]{position:absolute;width:200px;height:200px;border-radius:50%;background:var(--upload-card-hover-glow-bg);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-0fa6b946]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-0fa6b946]{width:70vw}}.upload-card-busy[data-v-0fa6b946] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-0fa6b946] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:var(--el-upload-dragger-border);opacity:.7;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);transition:height .3s ease,opacity .25s ease,border-color .25s ease,box-shadow .25s ease,background-color .25s ease}[data-v-0fa6b946] .el-upload:focus .el-upload-dragger,[data-v-0fa6b946] .el-upload:focus-within .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-0fa6b946] .el-upload-dragger.is-dragover,[data-v-0fa6b946] .el-upload-dragger:hover{opacity:.8;border-color:var(--glass-border-hover);box-shadow:var(--el-upload-dragger-hover-box-shadow)}.is-uploading[data-v-0fa6b946] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-0fa6b946]{position:relative;background:none}.upload-card.is-uploading[data-v-0fa6b946]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-0fa6b946 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-0fa6b946]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.el-upload__text.upload-list-busy[data-v-0fa6b946]{font-size:small}@media (max-width:768px){.el-upload__text.upload-list-busy[data-v-0fa6b946],.el-upload__text[data-v-0fa6b946]{font-size:12px}}.el-icon--upload[data-v-0fa6b946]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-0fa6b946]{color:#6b6b73}.el-upload__text[data-v-0fa6b946] em{color:#1d4ed8}html.dark .el-upload__text[data-v-0fa6b946] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-0fa6b946]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-0fa6b946]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-0fa6b946]{font-size:30px}}.paste-card[data-v-0fa6b946]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-0fa6b946]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-0fa6b946]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-0fa6b946]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-0fa6b946 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-0fa6b946] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-0fa6b946]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-0fa6b946]{width:50vw;height:70%;border-radius:16px;background:color-mix(in srgb,var(--primary-color) 4%,var(--glass-bg));border:1px solid var(--glass-border);box-shadow:none;transition:background-color .22s ease,border-color .22s ease,box-shadow .22s ease;box-sizing:border-box;display:flex;position:relative;overflow:hidden}.upload-card-busy .upload-card-textarea[data-v-0fa6b946]{height:50%}.upload-card-textarea[data-v-0fa6b946]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-0fa6b946]:focus-within{background:color-mix(in srgb,var(--primary-color) 7%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 45%,var(--glass-border));box-shadow:none}.upload-card-textarea[data-v-0fa6b946] .el-textarea__inner{border-radius:16px;background:transparent;transition:color .2s ease,background-color .2s ease;resize:none;border:none;box-shadow:none!important;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}.upload-card-textarea[data-v-0fa6b946] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-0fa6b946] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-0fa6b946] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-0fa6b946] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-0fa6b946] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-0fa6b946] ::-webkit-scrollbar-thumb{background:rgba(37,99,235,.5);border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-0fa6b946] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-0fa6b946]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-0fa6b946]{min-width:92px;height:38px;border-radius:10px!important;font-weight:600;font-size:14px;letter-spacing:.04em;color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 10%,transparent)!important;border:1px solid color-mix(in srgb,var(--primary-color) 36%,var(--glass-border))!important;box-shadow:none;transition:background-color .2s ease,border-color .2s ease,transform .2s ease!important}.paste-card-upload-button[data-v-0fa6b946]:hover{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;transform:translateY(-1px);box-shadow:none}.paste-card-upload-button[data-v-0fa6b946]:focus-visible{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 14%,transparent)!important}.paste-card-upload-button[data-v-0fa6b946]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-0fa6b946]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-0fa6b946]{margin-top:10px}.paste-card-method-group[data-v-0fa6b946]{position:relative;display:inline-flex;align-items:center;width:158px;height:38px;box-sizing:border-box;gap:2px;padding:3px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;overflow:hidden}.paste-card-method-group[data-v-0fa6b946]:before{content:"";position:absolute;top:3px;left:3px;width:calc(50% - 4px);height:calc(100% - 6px);border-radius:7px;background:color-mix(in srgb,var(--primary-color) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--primary-color) 42%,var(--glass-border)) inset;transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.paste-card-method-group.is-external[data-v-0fa6b946]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-0fa6b946]{position:relative;z-index:1;display:inline-flex;flex:1 1 0;align-items:center;justify-content:center;min-width:0;height:30px;box-sizing:border-box;padding:0 14px;border:none;border-radius:7px;background:transparent;font-weight:500;font-size:13px;line-height:1;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.paste-card-method-button.is-active[data-v-0fa6b946],.paste-card-method-button[data-v-0fa6b946]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-0fa6b946]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-0fa6b946]{height:var(--upload-card-height);min-height:0;max-height:var(--upload-card-height);padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-0fa6b946]{height:var(--upload-card-busy-height);min-height:0;max-height:var(--upload-card-busy-height);padding:5px}.upload-card-textarea[data-v-0fa6b946]{margin-top:4px;width:calc(100% - 4px)!important;min-height:0;flex-shrink:1}.upload-card-textarea[data-v-0fa6b946] .el-textarea__inner{height:100%;min-height:0!important;box-sizing:border-box;border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-0fa6b946]{flex:0 0 auto;width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-0fa6b946]{letter-spacing:.02em;padding:0 10px}.paste-card-upload-button[data-v-0fa6b946],.upload-card-busy .paste-card-upload-button[data-v-0fa6b946]{height:28px;min-width:56px;border-radius:7px!important;font-size:11px}.upload-card-busy .paste-card-actions[data-v-0fa6b946]{margin-top:6px}.paste-card-method-group[data-v-0fa6b946]{width:112px;height:28px;padding:2px;border-radius:8px}.paste-card-method-group[data-v-0fa6b946]:before{top:2px;left:2px;width:calc(50% - 3px);height:calc(100% - 4px);border-radius:6px}.paste-card-method-button[data-v-0fa6b946]{height:22px;padding:0 8px;font-size:10px;border-radius:6px}}.upload-list-dashboard[data-v-0fa6b946]{display:flex;justify-content:space-between;align-items:center;height:var(--upload-list-inner-height);padding:0 15px;box-sizing:border-box;width:100%;min-width:0;position:sticky;top:0;z-index:1;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:var(--upload-list-radius);box-shadow:var(--glass-shadow);opacity:.7}.upload-list-card:not(.upload-list-busy) .upload-list-dashboard[data-v-0fa6b946]{height:100%}[data-v-0fa6b946] .el-upload-dragger{position:relative;overflow:hidden}[data-v-0fa6b946] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:200px 200px}[data-v-0fa6b946] .el-upload-dragger:after,[data-v-0fa6b946] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-0fa6b946] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-0fa6b946]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-0fa6b946 60s linear infinite}.upload-card[data-v-0fa6b946]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-0fa6b946 40s linear infinite,starPulse-0fa6b946 4s ease-in-out infinite}@keyframes starScroll-0fa6b946{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-0fa6b946{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-0fa6b946]{display:flex;align-items:center;gap:5px;height:44px;box-sizing:border-box;padding:5px;background:var(--glass-bg);border-radius:12px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-group[data-v-0fa6b946]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-0fa6b946]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:13px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);cursor:pointer;transition:background-color .22s ease,color .22s ease,box-shadow .22s ease,transform .22s ease;font-size:14px;box-shadow:var(--upload-action-btn-shadow);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-0fa6b946]:focus,.modern-action-btn[data-v-0fa6b946]:focus-visible{outline:none!important}.modern-action-btn[data-v-0fa6b946]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-0fa6b946]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-0fa6b946]:hover:before{opacity:.08}.modern-action-btn[data-v-0fa6b946]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-0fa6b946]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-0fa6b946]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-0fa6b946]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-0fa6b946]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-0fa6b946]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-0fa6b946]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-0fa6b946]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;height:44px;box-sizing:border-box;padding:0 14px;background:var(--dashboard-title-bg,rgba(37,99,235,.06));border:none;border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-0fa6b946]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-0fa6b946]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-0fa6b946]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-0fa6b946]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-0fa6b946]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-0fa6b946]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-0fa6b946]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-0fa6b946]{flex-shrink:0}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-28b8eda7]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-28b8eda7]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-28b8eda7]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-28b8eda7]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-28b8eda7]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-e9449eac]{border:1px solid var(--glass-border);box-sizing:border-box;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:12px;background-color:var(--glass-bg);box-shadow:none;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}#themeToggle[data-v-e9449eac]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-e9449eac]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-e9449eac]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-e9449eac]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-e9449eac]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-e9449eac]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-e9449eac]{transform:rotate(40deg)}.theme_toggle_g[data-v-e9449eac]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-e9449eac],.icon-fade-leave-active[data-v-e9449eac]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-e9449eac]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-e9449eac]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-e9449eac],.icon-fade-leave-from[data-v-e9449eac]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-e9449eac]{display:inline-block}.container[data-v-15adb2dc]{background:var(--bg-color);min-height:100vh}.rotate[data-v-15adb2dc]{animation:spin-15adb2dc 2s ease-in-out}.scale[data-v-15adb2dc]{animation:scale-15adb2dc .5s ease-in-out}@keyframes spin-15adb2dc{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-15adb2dc{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-15adb2dc{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-15adb2dc{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-15adb2dc{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-15adb2dc]{display:inline-block}.mobile-only[data-v-15adb2dc]{display:none}@media (max-width:768px){.desktop-only[data-v-15adb2dc]{display:none!important}.mobile-only[data-v-15adb2dc]{display:flex!important}}.toggle-dark-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;border-radius:12px;position:fixed;top:30px;right:80px;padding:0}.more-dropdown[data-v-15adb2dc]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-15adb2dc]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none;padding:0}@media (max-width:768px){.upload-method-button[data-v-15adb2dc]{width:2rem;height:2rem}}.upload-method-icon[data-v-15adb2dc]{outline:none}.more-button .svg-inline--fa[data-v-15adb2dc],.upload-method-button .svg-inline--fa[data-v-15adb2dc]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-15adb2dc]{font-size:1.2em}.mobile-more-dropdown[data-v-15adb2dc]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-15adb2dc]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-15adb2dc]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-15adb2dc]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-15adb2dc],.upload-folder-container[data-v-15adb2dc]{right:58px}}.upload-folder[data-v-15adb2dc]{width:100px;height:2.5rem;border-radius:12px;display:flex;align-items:center;box-sizing:border-box;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-15adb2dc]{width:200px}@media (max-width:768px){.upload-folder[data-v-15adb2dc]{width:80px;height:2rem}.upload-folder.active[data-v-15adb2dc]{width:120px}}.directory-tree-trigger[data-v-15adb2dc]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;box-sizing:border-box;border:1px solid var(--glass-border);margin-left:10px;background-color:var(--glass-bg);box-shadow:var(--glass-shadow);color:var(--theme-toggle-color);border-radius:12px;outline:none;cursor:pointer;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}.directory-tree-trigger[data-v-15adb2dc]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-15adb2dc]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-15adb2dc]{font-size:1.1em}}.upload-folder[data-v-15adb2dc] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-15adb2dc] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-15adb2dc] .el-input__wrapper{border-radius:12px;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);height:100%;padding:0 10px;box-sizing:border-box;transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease!important}.upload-folder[data-v-15adb2dc] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-15adb2dc] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.upload-folder[data-v-15adb2dc] .el-input__wrapper.is-focus,.upload-folder[data-v-15adb2dc] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-15adb2dc]{--quick-toolbar-size:2.5rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 6px);position:fixed;bottom:50px;right:30px;width:var(--quick-toolbar-size);box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:0;z-index:200;padding:3px;border-radius:999px;border:1px solid var(--glass-border);background-color:var(--glass-bg);box-shadow:none;transition:background-color .24s ease,border-color .24s ease}.directory-tree-trigger[data-v-15adb2dc],.mobile-more-button[data-v-15adb2dc],.more-dropdown .more-button[data-v-15adb2dc],.quick-toolbar[data-v-15adb2dc],.toggle-dark-button[data-v-15adb2dc],.upload-method-button[data-v-15adb2dc]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-15adb2dc]{width:var(--quick-toolbar-button-size);height:var(--quick-toolbar-button-size);border:none;transition:transform .22s ease,background-color .22s ease,box-shadow .22s ease,color .22s ease;margin-left:0;padding:0;border-radius:999px;background-color:transparent;box-shadow:none;color:var(--toolbar-button-color);outline:none}.quick-toolbar-actions[data-v-15adb2dc]{display:grid;grid-template-rows:0fr;width:100%;margin-bottom:0;opacity:0;pointer-events:none;transform:translateY(12px);transform-origin:bottom center;transition:grid-template-rows .52s cubic-bezier(.16,1,.3,1),margin-bottom .52s cubic-bezier(.16,1,.3,1),opacity .32s ease,transform .52s cubic-bezier(.16,1,.3,1)}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-15adb2dc]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-15adb2dc]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-15adb2dc]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-15adb2dc]{margin-top:4px}.quick-toolbar-icon[data-v-15adb2dc]{font-size:16px}.quick-toolbar-toggle-icon[data-v-15adb2dc]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-15adb2dc]{transform:rotate(0deg)}.info-container[data-v-15adb2dc]:hover,.quick-toolbar-button[data-v-15adb2dc]:hover{transform:scale(1.05);background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.quick-toolbar[data-v-15adb2dc]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-15adb2dc]:hover{transform:none}.toggle-dark-button[data-v-15adb2dc]:hover,.upload-method-button[data-v-15adb2dc]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-15adb2dc]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-15adb2dc]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}@media (max-width:768px){.quick-toolbar[data-v-15adb2dc]{--quick-toolbar-size:2rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 4px);right:18px;bottom:max(72px,calc(6vh + 20px + env(safe-area-inset-bottom)));padding:2px}.quick-toolbar-actions[data-v-15adb2dc]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-15adb2dc]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-15adb2dc]{gap:2px}.quick-toolbar-more[data-v-15adb2dc]{margin-top:3px}.quick-toolbar-icon[data-v-15adb2dc]{font-size:14px}}[data-v-15adb2dc] .el-dialog{border-radius:12px;border:1px solid var(--glass-border);background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-15adb2dc]{display:flex;justify-content:center;margin-top:20px}.header[data-v-15adb2dc]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-15adb2dc]{font-size:2.25rem;font-weight:400;font-family:Pacifico,Noto Sans SC,sans-serif;color:var(--upload-title-text-color);text-shadow:var(--upload-title-text-shadow);position:relative;padding-bottom:8px;cursor:pointer;transition:transform .4s cubic-bezier(.4,0,.2,1),filter .25s ease;animation:float-15adb2dc 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-15adb2dc]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-15adb2dc]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:var(--upload-title-underline-bg);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:var(--upload-title-underline-shadow)}.title[data-v-15adb2dc]:hover:after{width:80%}.main-title[data-v-15adb2dc]{color:var(--upload-main-title-color);text-decoration:none;display:inline-block;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3));transition:opacity .16s ease}.title:hover .main-title[data-v-15adb2dc]{opacity:0}.title[data-v-15adb2dc]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-15adb2dc]{position:absolute;left:50%;top:-1px;z-index:2;width:-moz-max-content;width:max-content;pointer-events:none;white-space:nowrap;color:var(--upload-title-crayon-deep,#1d2129);opacity:0;-webkit-text-stroke:.35px var(--upload-title-crayon-edge);text-shadow:-1.2px .4px 0 var(--upload-title-crayon-burr),.9px -.7px 0 hsla(0,0%,100%,.24),1.5px .5px 0 var(--upload-title-crayon-dust),-1.7px -.6px 0 var(--upload-title-crayon-dust);transform:translateX(-50%) rotate(-.8deg);transform-origin:left 68%;clip-path:inset(-10px 100% -10px -10px);filter:saturate(1.08) contrast(1.06)}.title:hover .title-crayon-text[data-v-15adb2dc]{animation:crayonWrite-15adb2dc .82s steps(18) forwards,crayonScratch-15adb2dc .16s steps(2) .82s 3}@keyframes float-15adb2dc{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-15adb2dc{0%{opacity:0;clip-path:inset(-10px 100% -10px -10px)}12%{opacity:.92}32%{clip-path:inset(-10px 68% -10px -10px)}47%{clip-path:inset(-10px 52% -10px -10px)}63%{clip-path:inset(-10px 34% -10px -10px)}78%{clip-path:inset(-10px 18% -10px -10px)}to{opacity:.92;clip-path:inset(-10px -10px -10px -10px)}}@keyframes crayonScratch-15adb2dc{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-15adb2dc]{font-size:1.4rem;letter-spacing:.75px}.title[data-v-15adb2dc]:hover{transform:scale(1.05)}}.upload-home[data-v-15adb2dc]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-15adb2dc]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-15adb2dc]{padding:5px 15px 2px;top:-2.5vh}.title[data-v-15adb2dc]{margin:.4em 0;padding-bottom:3px;line-height:1.2}.upload[data-v-15adb2dc]{top:-3.8vh}}.footer[data-v-15adb2dc]{height:6vh} \ No newline at end of file diff --git a/frontend-dist/css/437.391209f6.css.gz b/frontend-dist/css/437.391209f6.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..99a4c03bd7e8e33c7db316712871b4c0f7be607a GIT binary patch literal 12306 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/css/322.2b40f004.css b/frontend-dist/css/581.e91379d5.css similarity index 90% rename from frontend-dist/css/322.2b40f004.css rename to frontend-dist/css/581.e91379d5.css index bd4f881..84f9aa2 100644 --- a/frontend-dist/css/322.2b40f004.css +++ b/frontend-dist/css/581.e91379d5.css @@ -1 +1 @@ -.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.tabs[data-v-07e603fa]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-07e603fa]{position:relative;display:grid;align-items:start;height:44px;overflow:visible}.page-switcher.is-open[data-v-07e603fa]{z-index:1200}.page-switcher-sheet[data-v-07e603fa]{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px;border:1px solid transparent;border-radius:14px;box-sizing:border-box;background-color:transparent;overflow:visible;transition:none}.page-switcher-sheet[data-v-07e603fa]:before{content:"";position:absolute;top:0;left:0;right:0;z-index:0;height:156px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);opacity:0;transform:translateY(-4px) scaleY(.72);transform-origin:top center;pointer-events:none;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.page-switcher.is-open .page-switcher-sheet[data-v-07e603fa]:before{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.page-switcher-title[data-v-07e603fa]{line-height:1}.page-switcher-arrow[data-v-07e603fa]{margin-left:auto;font-size:.75em;color:var(--tabs-switcher-accent-color);transition:transform .3s ease}.page-switcher.is-open .page-switcher-arrow[data-v-07e603fa]{transform:rotate(180deg)}.page-option[data-v-07e603fa]{position:relative;z-index:1;display:inline-flex;flex:0 0 auto;align-items:center;box-sizing:border-box;gap:7px;width:100%;min-width:148px;height:37px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:15px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:none}.page-option-list[data-v-07e603fa]{position:absolute;top:41px;left:5px;right:5px;display:flex;flex-direction:column;align-items:stretch;opacity:0;pointer-events:none;transform:translateY(-9px) scaleY(.86);transform-origin:top center;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-list .page-option[data-v-07e603fa]{position:relative;z-index:1;width:100%}.page-option-highlight[data-v-07e603fa]{position:absolute;top:0;left:0;right:0;z-index:0;height:37px;border-radius:10px;background:var(--tabs-switcher-hover-bg);opacity:0;pointer-events:none;transform:translateY(calc(var(--hovered-option-index)*37px));transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-highlight.is-visible[data-v-07e603fa]{opacity:1}.page-switcher.is-open .page-option-list[data-v-07e603fa]{opacity:1;pointer-events:auto;transform:translateY(0) scaleY(1)}.page-option.is-current[data-v-07e603fa]{height:37px;gap:8px;padding:0 14px;color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg);border:1px solid var(--tabs-switcher-current-border-color);box-shadow:none;font-size:1.1em;font-weight:700;line-height:1.15}.page-option.is-current>.page-option-icon[data-v-07e603fa]{width:17px;font-size:1.05em}.page-option.is-current>.page-option-icon[data-v-07e603fa],.page-option.is-current>.page-switcher-arrow[data-v-07e603fa],.page-option.is-current>.page-switcher-title[data-v-07e603fa]{translate:0 1px}.page-option[data-v-07e603fa]:hover{color:var(--tabs-switcher-accent-color);background-color:transparent}.page-option.is-current[data-v-07e603fa]:hover{color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg)}.page-option-icon[data-v-07e603fa]{width:16px;color:var(--tabs-switcher-accent-color)}@media (max-width:768px){.tabs[data-v-07e603fa]{gap:6px}.page-switcher-title[data-v-07e603fa]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-switcher-sheet[data-v-07e603fa]{width:-moz-max-content;width:max-content;max-width:calc(100vw - 96px)}.page-switcher-sheet[data-v-07e603fa]:before{height:136px;transform:translateY(-3px) scaleY(.72)}.page-option[data-v-07e603fa]{justify-content:flex-start;min-width:0;height:32px;padding:0 10px;font-size:12px;gap:6px}.page-option-icon[data-v-07e603fa]{width:15px}.page-option-list[data-v-07e603fa]{top:36px;transform:translateY(-8px) scaleY(.86)}.page-option-highlight[data-v-07e603fa]{height:32px;transform:translateY(calc(var(--hovered-option-index)*32px))}.page-option.is-current[data-v-07e603fa]{height:32px;gap:5px;padding:0 10px;font-size:1em}.page-option.is-current>.page-option-icon[data-v-07e603fa]{width:16px}.page-option.is-current>.page-switcher-arrow[data-v-07e603fa]{margin-left:4px}.tabs-language-switcher[data-v-07e603fa]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-07e603fa]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.tabs[data-v-07e603fa] #themeToggle,.tabs[data-v-07e603fa] #themeToggle:hover,.tabs[data-v-07e603fa] .language-switcher,.tabs[data-v-07e603fa] .language-switcher:hover{background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important} \ No newline at end of file +.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.tabs[data-v-2fe4fd26]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-2fe4fd26]{position:relative;display:grid;align-items:start;height:44px;overflow:visible}.page-switcher.is-open[data-v-2fe4fd26]{z-index:1200}.page-switcher-sheet[data-v-2fe4fd26]{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px;border:1px solid transparent;border-radius:14px;box-sizing:border-box;background-color:transparent;overflow:visible;transition:none}.page-switcher-sheet[data-v-2fe4fd26]:before{content:"";position:absolute;top:0;left:0;right:0;z-index:0;height:160px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);opacity:0;transform:translateY(-4px) scaleY(.72);transform-origin:top center;pointer-events:none;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.page-switcher.is-open .page-switcher-sheet[data-v-2fe4fd26]:before{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.page-switcher-title[data-v-2fe4fd26]{line-height:1}.page-switcher-arrow[data-v-2fe4fd26]{margin-left:auto;font-size:.75em;color:var(--tabs-switcher-accent-color);transition:transform .3s ease}.page-switcher.is-open .page-switcher-arrow[data-v-2fe4fd26]{transform:rotate(180deg)}.page-option[data-v-2fe4fd26]{position:relative;z-index:1;display:inline-flex;flex:0 0 auto;align-items:center;box-sizing:border-box;gap:7px;width:100%;min-width:148px;height:37px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:15px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:none}.page-option-list[data-v-2fe4fd26]{position:absolute;top:45px;left:5px;right:5px;display:flex;flex-direction:column;align-items:stretch;opacity:0;pointer-events:none;transform:translateY(-9px) scaleY(.86);transform-origin:top center;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-list .page-option[data-v-2fe4fd26]{position:relative;z-index:1;width:100%}.page-option-highlight[data-v-2fe4fd26]{position:absolute;top:0;left:0;right:0;z-index:0;height:37px;border-radius:10px;background:var(--tabs-switcher-hover-bg);opacity:0;pointer-events:none;transform:translateY(calc(var(--hovered-option-index)*37px));transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-highlight.is-visible[data-v-2fe4fd26]{opacity:1}.page-switcher.is-open .page-option-list[data-v-2fe4fd26]{opacity:1;pointer-events:auto;transform:translateY(0) scaleY(1)}.page-option.is-current[data-v-2fe4fd26]{height:37px;gap:8px;padding:0 14px;color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg);border:1px solid var(--tabs-switcher-current-border-color);box-shadow:none;font-size:1.1em;font-weight:700;line-height:1.15}.page-option.is-current>.page-option-icon[data-v-2fe4fd26]{width:17px;font-size:1.05em}.page-option.is-current>.page-option-icon[data-v-2fe4fd26],.page-option.is-current>.page-switcher-arrow[data-v-2fe4fd26],.page-option.is-current>.page-switcher-title[data-v-2fe4fd26]{translate:0 1px}.page-option[data-v-2fe4fd26]:hover{color:var(--tabs-switcher-accent-color);background-color:transparent}.page-option.is-current[data-v-2fe4fd26]:hover{color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg)}.page-option-icon[data-v-2fe4fd26]{width:16px;color:var(--tabs-switcher-accent-color)}@media (max-width:768px){.tabs[data-v-2fe4fd26]{gap:6px}.page-switcher-title[data-v-2fe4fd26]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-switcher-sheet[data-v-2fe4fd26]{width:-moz-max-content;width:max-content;max-width:calc(100vw - 96px)}.page-switcher-sheet[data-v-2fe4fd26]:before{height:140px;transform:translateY(-3px) scaleY(.72)}.page-option[data-v-2fe4fd26]{justify-content:flex-start;min-width:0;height:32px;padding:0 10px;font-size:12px;gap:6px}.page-option-icon[data-v-2fe4fd26]{width:15px}.page-option-list[data-v-2fe4fd26]{top:40px;transform:translateY(-8px) scaleY(.86)}.page-option-highlight[data-v-2fe4fd26]{height:32px;transform:translateY(calc(var(--hovered-option-index)*32px))}.page-option.is-current[data-v-2fe4fd26]{height:32px;gap:5px;padding:0 10px;font-size:1em}.page-option.is-current>.page-option-icon[data-v-2fe4fd26]{width:16px}.page-option.is-current>.page-switcher-arrow[data-v-2fe4fd26]{margin-left:4px}.tabs-language-switcher[data-v-2fe4fd26]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-2fe4fd26]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.tabs[data-v-2fe4fd26] #themeToggle,.tabs[data-v-2fe4fd26] #themeToggle:hover,.tabs[data-v-2fe4fd26] .language-switcher,.tabs[data-v-2fe4fd26] .language-switcher:hover{background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important} \ No newline at end of file diff --git a/frontend-dist/css/581.e91379d5.css.gz b/frontend-dist/css/581.e91379d5.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..9108e25045f398596d9172f6f8a551a6854a5201 GIT binary patch literal 4776 zcmV;Z5?AdXiwFP!000023e`PpkLxJ1f5p42k=nB%a?(k6pG14KKjMD4=Z=nA#3nJ@ zj`3phnyCN#72pRiV>_M9>}sSlX#!P6QPcy9$`oZFMKD413PAH26fj9}zFS4XJSxs> z^{W)&UCLH3ynRE?pv1rPo*P2>w;OU^Z!>fTWlC}Wv5MAJ|0ASNHkfc-V=}+5+QZLj z2J_tk?hq(Xn8higza@}Ca0JoY^5r#&;LmG(pe3QJg5aDXx=wIeWbm@Wd4_WYI6Z5a z;av_eL;G?SBhl?&hmzs#1;iw0C}(vuIHAo4X5dgF3QClrn5}Y>qczx*-|bebfl-*3 zm|>EyV3q~b=Q2RBL~04S|_rVrD%@; zBfDLOO(3?=owj}nB)nh7i}yhCyo8hmpRZ4a$mwBB2MMhOtxD1`|*sVh;pIf(SmX_LYHL+AZqdeFImd4duUqbwVX zMouO}Td_2UeZInZiC8d;igOUj{{itY-EH7gG~xeEXG;eVDmbe_0i(d+JVED{Zt*9` z3EjgiTyJ3fv7_XWCzf1k>;H7NqAg`^YmYJ;|fqU(k*M)s|upB3jdmw{E(4h`6bB$w5e#D@|baf!JyA_vCR zvrw9C*J%n%uqA{c+Oz?%%?>!JY(~K7DuX2haf-7fV2MH@7u!h>tTLt~%f#nPAFOM$ z>U@%wv$Wu^&aP%nQa!OWH|n~tc9ov6!k#2 zBuI*Q@9QA_DXgW6Sb|*|P=$`DHfJyuY-;=k2W_49)NF7d;Rf!?#SK!J$5K}8?W-)v zx-w9*qg*@+6MQHwBPW}y?Kr?P8BRvK$7l26TucA_nTx-|NAcwz(jCrM(OQ-HwZgR4 zWe^{?gzgo~+I$O=1BK$l7M3g&eg(ieAO}{h)gI?hoQ4UPg|LI89UF0O8+Fazg*Ewr zY_}z1D=;t49VkF!O0La}R+KQv(9^dlLAx&6zVl|W>^g((?v<6g_GxpsO$$2#{uXDj zEPwq6|NOI&Z0-jK%g95>O86UBpLG5O?+Zd1)D=gO!5F0^OB8ioxvoN+R7*QIkn?Sk zCyk;v%*CgwJu%Z2*(z%Gh7i)o=p7hpaJoA%#^U&C+F2~D&<WmsU*D+&?pb*I7U8ba z7Spmh-?nYzc!2T{^Xu>g!|qC9192pY>AiWF-kFE#-FcXPk%way*Z>-D0eL?nhjQ{J zn4`%|@6XHh?z~JNz{{`7u>w&U9Wru=Qvl_~tLRy~+xn^gpXf{6 z-)`OAR6oKXJirn@Lf1aP$UH)gJwSgyLPI=2HTuZBibEXm_04{FKmXod`Q4r9`@6gk z@K5jWOFqEyyT6n60FUba-p>PE6^C0P&mqU`@b`B$*R6moP6uw4o{?S&9zS+4UhjI3 zAM3?y+{SD@2Rii$_zed;#sR5zX#M#gaGW*v&P+;`z1}uG*Y>6*gGGr}B`P3=+?^FT zGI${ep1ycSiHBpINh$WcIc2T{yq?M0iN0ZPe&*-UdkGKu=0@Rv{|V%4TA~%3T3}>$ z9p-6O`c<&S|K72_oJKX#Udf=ig;4QbeZhSjy&8!6GVH*Uh?O)`eqSvTL2>-*L+)j=k;Lr4^f;}q zW0PqEf5^moP(6O*jGya0C5W>o_)>s*13aHMI|AIWnEDogerEf`Nx&cKIE@;5AHPX+ z5>~VR2O3`cCyC!c`u@Iw^g23aB$&pKBGwS)FwcKT;(Y(pJO8VbMQ46|!(W_ZhGC{8 zg*q~5?~p?8OTd~h^aNCm`S(hwpX)eyLLCr@DxJ*J#43pD(p9XCWUA1s`eLLxg|>3M zRPa++#wh2!bv}4;J&RD1)0e^}3$onZ~j@h_D{N ziR-k{=5i=j8P~V38cp=05x>7zUI;}Z-@KsYe5tjFP}rUMg%t^+(>#itdR@&u9mtk% zF6y>8Xa={Hr;3#jj zbSt{H)wMLTvJ1=^1=IPmEq^5!X6T5rpFzh9V5e&6 zdIhb&lMGxI;2tUEtDLYW3uYLMI8EsQ@xA8(LY<}30Ke~HWV(3lN9Y4Nz@HS zno6y-gYo8BAGTq+i*fe5s*XY&ZV$p&Vxg9x>6=4P2A3*ml>5v*si1kq-n#&CMoRVV z<|1mV35d_M{m8k$XbUqeYE5TAg!vJcy)`J*-QK}0#rcH{$0PXTQXdV0G7GNsSrSM6 z1+8L{xbxM;WIh)eeL{?%RVFU#ms(tql*(58jc;3=Kzzy|L;w2(mUZm}C*8Fc>)i2z zxN706m#STxToAE?g{0oMB;xHafP!7hEMD3tU0!CtzbE*Jxqho%>Hxer#iyWTM^RbU zD&ZUFW%tAy&W>Uw*H2PmcL;Hg&TP^#?yGX6d{kCqVTcUhY#sCZA?Hb8Xm0%CuO z{MjSA!W{2KG`CW_;M^Peg*w0t!6WhmBnQ?5@t+^)vZZj3%0Q>&8vW8bD=rawPM)F( z;J)f43O^Z9d?H8h|9gtU&n|4_z*KbI02C|(X!`t{s3!M6qL^G=vThmA7T-{^{8^t! zM_wa5yy{-%yHm7pG6?u*UByqIUzfa9S&M>_0#SCc0-uSxGbZ9+bsWQcesQ!t4yIKsRvkS| z;)~Tp%@!x7xfhctMW91ja~HN!B{1RDCA3k1YHq=jlwI6Jriy}sr=CNQ+l#Z%K8HV&(UwVa^ z&pqU9DcRdNT)VrBVTPWjZ(&ez3DotMOv)L#5uy!H66pYF^UFVznT2=OpsldN10z~l z%@&F)Uj6iD4ypA!+c&bD86o06Q ze1Fey$*%k#P_j!_ou@XZtZmhqnK*BDp1LlL+9xV#q3f@mrP4afA*#i9o?p5!%j%Cl z)G`2__FTTTIq|UX z4wqM@L{BH+U~^#Xzo3wxLpo($puTH}pa~`Kbrs>};6rXAI#9`NGFIv}7+mrbT=EW9 zX}7vvtD9P_OiuX0ZbnXOZgGQxA2nTht<>62d~*wRodGJ#zO|LDhV%|HxIvkgM>_C0 zMdX>*wSB4xTB!jkZOYP7{->WNl^msN=~YJ-eNGwNl(jLOZ_#3#%wK+9Z*}b_0ZBZV?zMg66Q)ehut#`VDVi51r=o$!s!xe&G@5N!&f8 zFyEmXNISM;qXeVY+)EcpD|20C>q%WfxZ)}9Kh@jO=_5a-ICZa1*1w3KTuZVZj$ zt@7_J+~e%hlY=X+wkgdxbRqhUjgVT0Xu1tYvzO}xh47ZeQ8GFN9F)`(lzAP$ za-zcU{>#$vkE^K4+}o^d)VW`;dG|$Y5*!M@-%My^i$cRPC(uTuE@S0ts!C{KXc>JK z>r6vi*Z6w#RUhP?Gy@DTMK2nnsIut{?KNHY8bx|F_~~rf#hdTivZx1IEw`$T^;&3& z0@G-T_Fn)y@el1WfI~-jxCM;_@#Svfj1H~ih)R7{-{&_E7SUduH%sB?@D+dY?gMSs zpa0yW1jFE|{XLP_m$%{^UONIqzU^MD2(N3sTBt8*ZzcZ>s(mfXR}Tu-Bqs68OB`|i zQz_Mt9Vjg=SwcI{qUd-EK=AFQIEUjRpypvpaMe*mo=X#QeYWs2$v^S3i!0``pdYwI`1`Y!TR|EJ1Dt-K%g zDxu@JDo}5qCj*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-54f87f24]{padding:0}.tab-content[data-v-54f87f24]{padding:20px}.tab-description[data-v-54f87f24]{margin:0 0 15px 0;color:var(--el-text-color-regular);font-size:14px}.input-section[data-v-54f87f24]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-54f87f24]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-54f87f24]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-54f87f24]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-54f87f24],.tags-to-add-section[data-v-54f87f24]{margin-bottom:20px}.common-tags-section h4[data-v-54f87f24],.tags-to-add-section h4[data-v-54f87f24]{margin:0 0 10px 0;font-size:14px;color:var(--el-text-color-regular)}.tags-container[data-v-54f87f24]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-54f87f24]{cursor:default}.empty-message[data-v-54f87f24]{color:var(--el-text-color-secondary);font-size:13px;padding:10px 0}.action-buttons[data-v-54f87f24]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-1dabc380]{padding:10px 0}.input-section[data-v-1dabc380]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-1dabc380]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-1dabc380]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-1dabc380]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-1dabc380],.popular-tags-section[data-v-1dabc380]{margin-bottom:20px}.current-tags-section h4[data-v-1dabc380],.popular-tags-section h4[data-v-1dabc380]{margin:0 0 10px 0;font-size:14px;color:var(--el-text-color-regular)}.tags-container[data-v-1dabc380]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-1dabc380]{cursor:default}.tag-item.clickable[data-v-1dabc380]{cursor:pointer;transition:transform .2s}.empty-message[data-v-1dabc380]{color:var(--el-text-color-secondary);font-size:13px;padding:10px 0}.dialog-footer[data-v-1dabc380]{display:flex;justify-content:flex-end}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-550287cc]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-550287cc]{margin-left:0!important}.video-preview[data-v-550287cc]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-550287cc],.video-preview[data-v-550287cc]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-550287cc]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-550287cc] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-550287cc]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-550287cc]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border:1px solid var(--glass-border);border-radius:8px;min-height:60px}.preview-content[data-v-550287cc]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-550287cc] .el-descriptions__content{word-break:break-all;word-wrap:break-word}[data-v-550287cc] .el-descriptions__content .el-tag,[data-v-550287cc] .el-descriptions__content .el-tag+span{vertical-align:middle}[data-v-550287cc] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}[data-v-550287cc] .el-descriptions__body table{table-layout:fixed}@media (max-width:768px){.detail-actions[data-v-550287cc]{justify-content:center}}.batch-floating-bar[data-v-49301bcc]{position:fixed;left:50%;bottom:max(84px,calc(72px + env(safe-area-inset-bottom)));transform:translateX(-50%);z-index:1200;display:flex;align-items:center;gap:8px;max-width:min(720px,calc(100vw - 48px));padding:8px;border:1px solid var(--admin-batch-toolbar-border);border-radius:18px;background:var(--admin-batch-toolbar-bg);box-shadow:var(--admin-batch-toolbar-shadow);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.batch-selection-summary[data-v-49301bcc]{display:flex;align-items:center;flex:0 0 auto;padding:0 4px}.batch-selection-count[data-v-49301bcc]{min-width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0 8px;border:1px solid color-mix(in srgb,var(--primary-color) 28%,transparent);border-radius:10px;color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 10%,transparent);font-size:14px;font-weight:600;line-height:1}.batch-toolbar-divider[data-v-49301bcc]{width:1px;height:24px;flex:0 0 auto;border-radius:999px;background:var(--admin-batch-toolbar-border);opacity:.78}.batch-floating-actions[data-v-49301bcc]{display:flex;align-items:center;gap:6px}.batch-floating-btn[data-v-49301bcc]{width:36px;height:36px;min-width:36px;margin-left:0!important;padding:0;border:1px solid transparent;border-radius:12px;color:var(--admin-batch-clear-color);background:var(--admin-batch-action-bg);box-shadow:var(--admin-batch-action-shadow);transition:border-color .2s ease,background-color .2s ease,color .2s ease}.batch-floating-btn[data-v-49301bcc]:hover{border-color:var(--glass-border-hover);color:var(--primary-color-accent);background:var(--admin-batch-action-hover-bg);box-shadow:var(--admin-batch-action-hover-shadow)}.batch-floating-btn.ban[data-v-49301bcc],.batch-floating-btn.copy[data-v-49301bcc],.batch-floating-btn.download[data-v-49301bcc],.batch-floating-btn.move[data-v-49301bcc],.batch-floating-btn.tag[data-v-49301bcc],.batch-floating-btn.white[data-v-49301bcc]{color:var(--admin-batch-action-color)}.batch-floating-btn.danger[data-v-49301bcc]{color:var(--admin-batch-delete-color)}.batch-floating-btn.danger[data-v-49301bcc]:hover{border-color:color-mix(in srgb,var(--admin-batch-delete-color) 32%,transparent);color:var(--admin-batch-delete-color);background:color-mix(in srgb,var(--admin-batch-delete-color) 10%,transparent)}.batch-floating-btn.ghost[data-v-49301bcc]{color:var(--admin-batch-clear-color)}.batch-floating-icon[data-v-49301bcc]{width:15px;margin-right:0}.batch-toolbar-enter-active[data-v-49301bcc],.batch-toolbar-leave-active[data-v-49301bcc]{transition:opacity .24s ease,transform .28s cubic-bezier(.22,1,.36,1)}.batch-toolbar-enter-from[data-v-49301bcc],.batch-toolbar-leave-to[data-v-49301bcc]{opacity:0;transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-49301bcc],.batch-toolbar-leave-from[data-v-49301bcc]{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}@media (max-width:768px){.batch-floating-bar[data-v-49301bcc]{left:50%;right:auto;bottom:max(76px,calc(64px + env(safe-area-inset-bottom)));transform:translateX(-50%);width:-moz-max-content;width:max-content;max-width:calc(100vw - 24px);gap:6px;padding:6px;border-radius:16px}.batch-selection-summary[data-v-49301bcc]{padding:0 1px}.batch-selection-count[data-v-49301bcc]{min-width:24px;height:26px;padding:0 7px;font-size:12px;border-radius:9px}.batch-toolbar-divider[data-v-49301bcc]{height:22px}.batch-floating-actions[data-v-49301bcc]{flex:1;min-width:0;gap:4px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:1px}.batch-floating-actions[data-v-49301bcc]::-webkit-scrollbar{display:none}.batch-floating-btn[data-v-49301bcc]{width:30px;height:30px;min-width:30px;padding:0;border-radius:10px}.batch-floating-icon[data-v-49301bcc]{margin-right:0;width:13px}.batch-toolbar-enter-from[data-v-49301bcc],.batch-toolbar-leave-to[data-v-49301bcc]{transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-49301bcc],.batch-toolbar-leave-from[data-v-49301bcc]{transform:translateX(-50%) translateY(0) scale(1)}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-25a3242c]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:65px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-25a3242c]:last-child{border-bottom:none}.list-item[data-v-25a3242c]:hover{background:var(--el-fill-color-light)}.list-col[data-v-25a3242c]{display:flex;align-items:center}.list-col-checkbox[data-v-25a3242c]{justify-content:center;min-width:40px}.list-col-checkbox[data-v-25a3242c] .el-checkbox{--el-checkbox-input-width:16px;--el-checkbox-input-height:16px}.list-col-preview[data-v-25a3242c]{justify-content:center;cursor:pointer}.list-col-name[data-v-25a3242c]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-25a3242c]:hover{color:var(--primary-color-accent)}.filename-ellipsis[data-v-25a3242c]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-25a3242c]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-25a3242c]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-25a3242c],.list-col-channel[data-v-25a3242c],.list-col-date[data-v-25a3242c],.list-col-size[data-v-25a3242c]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-25a3242c]{font-size:13px}.address-box[data-v-25a3242c],.channel-name-box[data-v-25a3242c]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-25a3242c]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-25a3242c]{width:70px}.address-box[data-v-25a3242c]::-webkit-scrollbar,.channel-name-box[data-v-25a3242c]::-webkit-scrollbar{display:none}.list-col-tags[data-v-25a3242c]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.color-tag[data-v-25a3242c]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-25a3242c]{min-width:30px;text-align:center}.list-empty[data-v-25a3242c]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-25a3242c]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-25a3242c]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-25a3242c]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-25a3242c]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-25a3242c]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-25a3242c]:hover{background:var(--primary-color);color:#fff}.list-action-danger[data-v-25a3242c]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-25a3242c]{grid-template-columns:20px 34px 1fr auto;padding:8px 6px;gap:6px;font-size:12px}.list-col-address[data-v-25a3242c],.list-col-channel-name[data-v-25a3242c],.list-col-channel[data-v-25a3242c],.list-col-date[data-v-25a3242c],.list-col-size[data-v-25a3242c],.list-col-tags[data-v-25a3242c]{display:none}.list-col-name[data-v-25a3242c]{padding-right:8px;line-height:1.25}.list-preview-img[data-v-25a3242c]{width:34px;height:34px;border-radius:5px}.list-folder-icon[data-v-25a3242c]{font-size:24px}.list-file-icon[data-v-25a3242c]{font-size:21px}.list-col-actions[data-v-25a3242c]{gap:3px}.list-action-btn[data-v-25a3242c]{width:26px;height:26px;border-radius:7px;font-size:12px}.list-col-checkbox[data-v-25a3242c]{width:18px;min-width:18px}.list-col-checkbox[data-v-25a3242c] .el-checkbox{--el-checkbox-input-width:14px;--el-checkbox-input-height:14px}}.img-card[data-v-956fb02e]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-956fb02e]:before{content:"";position:absolute;top:0;left:0;right:0;height:45%;background:linear-gradient(180deg,rgba(0,0,0,.35) 0,rgba(0,0,0,.12) 50%,transparent);pointer-events:none;z-index:5}.img-card[data-v-956fb02e] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-956fb02e] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-956fb02e] .el-checkbox__inner{width:14px!important;min-width:14px;height:14px!important;min-height:14px;border-radius:50%!important}.img-card[data-v-956fb02e]:hover{transform:scale(1.05)}.image-preview[data-v-956fb02e],.video-preview[data-v-956fb02e]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-956fb02e]{cursor:pointer}.img-card:hover .file-icon[data-v-956fb02e],.img-card:hover .image-preview[data-v-956fb02e],.img-card:hover .video-preview[data-v-956fb02e]{transform:scale(1.03)}.image-preview[data-v-956fb02e]:hover{opacity:.8}.file-short-info[data-v-956fb02e]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-956fb02e]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-956fb02e],.success-tag[data-v-956fb02e]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3)}.fail-tag[data-v-956fb02e]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-956fb02e]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3)}.file-preview[data-v-956fb02e]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-956fb02e]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-956fb02e]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-956fb02e]{cursor:pointer}.card-bottom-overlay[data-v-956fb02e]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-956fb02e]{display:flex;align-items:center;justify-content:center}.file-name[data-v-956fb02e]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-956fb02e]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-956fb02e]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-956fb02e],.action-bar-right[data-v-956fb02e]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-956fb02e]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-956fb02e]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-956fb02e]:active{transform:scale(.95)}.action-btn-danger[data-v-956fb02e]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.img-card[data-v-956fb02e]{height:148px;border-radius:7px;contain-intrinsic-size:148px}.img-card[data-v-956fb02e] .el-checkbox{top:6px;right:6px;transform:scale(1.1)}.img-card[data-v-956fb02e]:hover{transform:none}.file-short-info[data-v-956fb02e]{gap:3px;max-width:calc(100% - 38px)}.fail-tag[data-v-956fb02e],.primary-tag[data-v-956fb02e],.success-tag[data-v-956fb02e]{max-width:72px;padding:2px 5px;border-radius:5px;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-bottom-overlay[data-v-956fb02e]{padding:22px 6px 6px}.file-name[data-v-956fb02e]{font-size:11px}.file-icon[data-v-956fb02e]{font-size:34px}.action-bar[data-v-956fb02e]{display:none!important}}@keyframes skeleton-shimmer-956fb02e{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-956fb02e]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-956fb02e 1.5s ease-in-out infinite}.error-wrapper[data-v-956fb02e]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-956fb02e]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-956fb02e]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-534cf01b]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-534cf01b] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-534cf01b] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-534cf01b] .el-checkbox__inner{width:14px!important;min-width:14px;height:14px!important;min-height:14px;border-radius:50%!important}.img-card[data-v-534cf01b]:hover{transform:scale(1.05)}.folder-card[data-v-534cf01b]{cursor:pointer}.folder-icon[data-v-534cf01b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-534cf01b]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-534cf01b]{transform:scale(1.03)}.card-bottom-overlay[data-v-534cf01b]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-534cf01b]{display:flex;align-items:center;justify-content:center}.file-name[data-v-534cf01b]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-534cf01b]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-534cf01b]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-534cf01b],.action-bar-right[data-v-534cf01b]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-534cf01b]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-534cf01b]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-534cf01b]:active{transform:scale(.95)}.action-btn-danger[data-v-534cf01b]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.img-card[data-v-534cf01b]{height:148px;border-radius:7px;contain-intrinsic-size:148px}.img-card[data-v-534cf01b] .el-checkbox{top:6px;right:6px;transform:scale(1.1)}.img-card[data-v-534cf01b]:hover{transform:none}.folder-icon-svg[data-v-534cf01b]{font-size:36px}.card-bottom-overlay[data-v-534cf01b]{padding:22px 6px 6px}.file-name[data-v-534cf01b]{font-size:11px}.action-bar[data-v-534cf01b]{display:none!important}}@keyframes skeleton-shimmer-070880ec{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-070880ec{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-070880ec]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border:1px solid var(--glass-border);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-070880ec]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-info[data-v-070880ec]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5)}.skeleton-text[data-v-070880ec]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-list-item[data-v-070880ec]{animation:skeleton-pulse-070880ec 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-070880ec]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-070880ec]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-text-long[data-v-070880ec]{width:80%}.skeleton-text-long[data-v-070880ec],.skeleton-text-short[data-v-070880ec]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-text-short[data-v-070880ec]{width:60px}.skeleton-text-tiny[data-v-070880ec]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-070880ec],.skeleton-text-tiny[data-v-070880ec]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-tag[data-v-070880ec]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-070880ec]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-070880ec]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-070880ec]{display:flex;align-items:center}.list-col-checkbox[data-v-070880ec],.list-col-preview[data-v-070880ec]{justify-content:center}@media (max-width:768px){.skeleton-card[data-v-070880ec]{height:148px;border-radius:7px}.skeleton-info[data-v-070880ec]{padding:22px 6px 6px}.skeleton-text[data-v-070880ec]{height:11px;width:68%;border-radius:3px}.list-item[data-v-070880ec]{box-sizing:border-box;grid-template-columns:20px 34px 1fr auto;padding:8px 6px;gap:6px;height:50px}.skeleton-checkbox[data-v-070880ec]{width:16px;height:16px}.skeleton-preview[data-v-070880ec]{width:34px;height:34px;border-radius:5px}.skeleton-text-long[data-v-070880ec],.skeleton-text-short[data-v-070880ec],.skeleton-text-tiny[data-v-070880ec]{height:10px;border-radius:3px}.skeleton-actions[data-v-070880ec]{width:58px;height:24px;border-radius:6px}.list-col-address[data-v-070880ec],.list-col-channel-name[data-v-070880ec],.list-col-channel[data-v-070880ec],.list-col-date[data-v-070880ec],.list-col-size[data-v-070880ec],.list-col-tags[data-v-070880ec]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.dashboard-checkbox[data-v-3757bfa7]{box-sizing:border-box;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;color:#fff;cursor:pointer;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]{position:relative;width:32px;height:32px;overflow:hidden;border:1px solid var(--glass-border);border-radius:10px;background:var(--glass-bg);box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .2s ease,border-color .2s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:before{content:"";position:absolute;inset:7px;box-sizing:border-box;border:1px solid var(--glass-border);border-radius:50%;background:transparent;transition:border-color .18s ease,background .18s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:hover{border-color:var(--glass-border-hover)}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:focus-visible{outline:none;border-color:color-mix(in srgb,var(--primary-color-accent) 42%,transparent)}.dashboard-checkbox--breadcrumb.checked[data-v-3757bfa7],.dashboard-checkbox--breadcrumb.indeterminate[data-v-3757bfa7]{border-color:var(--glass-border);background:var(--glass-bg)}.dashboard-checkbox--breadcrumb.checked[data-v-3757bfa7]:before,.dashboard-checkbox--breadcrumb.indeterminate[data-v-3757bfa7]:before{border-color:hsla(0,0%,100%,.4);background:var(--primary-color)}.dashboard-checkbox-mark[data-v-3757bfa7]{position:relative;z-index:1;width:10px;height:10px;opacity:0;transform:scale(.72);transition:opacity .16s ease,transform .16s ease}.dashboard-checkbox.checked .dashboard-checkbox-mark[data-v-3757bfa7],.dashboard-checkbox.indeterminate .dashboard-checkbox-mark[data-v-3757bfa7]{opacity:1;transform:scale(1)}.dashboard-checkbox--breadcrumb .dashboard-checkbox-mark[data-v-3757bfa7]{width:11px;height:11px}@media (max-width:768px){.dashboard-checkbox--breadcrumb[data-v-3757bfa7]{width:28px;height:28px;border-radius:8px}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:before{inset:6px}.dashboard-checkbox--breadcrumb .dashboard-checkbox-mark[data-v-3757bfa7]{width:10px;height:10px}}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-68ddb899]{flex-shrink:0}.filter-trigger[data-v-68ddb899]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-68ddb899]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-68ddb899]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.filter-badge[data-v-68ddb899] .el-badge__content{background:var(--primary-color);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-68ddb899]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-68ddb899]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-68ddb899]:last-of-type{border-bottom:none}.filter-title[data-v-68ddb899]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-68ddb899],.filter-options[data-v-68ddb899] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-68ddb899] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:4px;transition:all .2s ease}.filter-options[data-v-68ddb899] .el-checkbox:hover{background:var(--el-fill-color-light)}.filter-options[data-v-68ddb899] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-68ddb899] .el-checkbox__input.is-checked+.el-checkbox__label{color:var(--primary-color-accent)}.channel-group-title[data-v-68ddb899]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-68ddb899]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-68ddb899] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--primary-color);border-color:var(--primary-color)}.filter-actions[data-v-68ddb899]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-68ddb899]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-68ddb899]:hover:not(:disabled){background:var(--primary-color);border-color:var(--primary-color-accent);color:#fff}.filter-actions .el-button[data-v-68ddb899]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-68ddb899]{min-width:160px;max-height:320px}.filter-section[data-v-68ddb899]{padding:6px 10px}.filter-title[data-v-68ddb899]{font-size:11px;margin-bottom:4px}.filter-options[data-v-68ddb899] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-68ddb899] .el-checkbox__label{font-size:12px}.header-icon[data-v-68ddb899]{font-size:1.2em}}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.tabs[data-v-07e603fa]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-07e603fa]{position:relative;display:grid;align-items:start;height:44px;overflow:visible}.page-switcher.is-open[data-v-07e603fa]{z-index:1200}.page-switcher-sheet[data-v-07e603fa]{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px;border:1px solid transparent;border-radius:14px;box-sizing:border-box;background-color:transparent;overflow:visible;transition:none}.page-switcher-sheet[data-v-07e603fa]:before{content:"";position:absolute;top:0;left:0;right:0;z-index:0;height:156px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);opacity:0;transform:translateY(-4px) scaleY(.72);transform-origin:top center;pointer-events:none;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.page-switcher.is-open .page-switcher-sheet[data-v-07e603fa]:before{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.page-switcher-title[data-v-07e603fa]{line-height:1}.page-switcher-arrow[data-v-07e603fa]{margin-left:auto;font-size:.75em;color:var(--tabs-switcher-accent-color);transition:transform .3s ease}.page-switcher.is-open .page-switcher-arrow[data-v-07e603fa]{transform:rotate(180deg)}.page-option[data-v-07e603fa]{position:relative;z-index:1;display:inline-flex;flex:0 0 auto;align-items:center;box-sizing:border-box;gap:7px;width:100%;min-width:148px;height:37px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:15px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:none}.page-option-list[data-v-07e603fa]{position:absolute;top:41px;left:5px;right:5px;display:flex;flex-direction:column;align-items:stretch;opacity:0;pointer-events:none;transform:translateY(-9px) scaleY(.86);transform-origin:top center;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-list .page-option[data-v-07e603fa]{position:relative;z-index:1;width:100%}.page-option-highlight[data-v-07e603fa]{position:absolute;top:0;left:0;right:0;z-index:0;height:37px;border-radius:10px;background:var(--tabs-switcher-hover-bg);opacity:0;pointer-events:none;transform:translateY(calc(var(--hovered-option-index)*37px));transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-highlight.is-visible[data-v-07e603fa]{opacity:1}.page-switcher.is-open .page-option-list[data-v-07e603fa]{opacity:1;pointer-events:auto;transform:translateY(0) scaleY(1)}.page-option.is-current[data-v-07e603fa]{height:37px;gap:8px;padding:0 14px;color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg);border:1px solid var(--tabs-switcher-current-border-color);box-shadow:none;font-size:1.1em;font-weight:700;line-height:1.15}.page-option.is-current>.page-option-icon[data-v-07e603fa]{width:17px;font-size:1.05em}.page-option.is-current>.page-option-icon[data-v-07e603fa],.page-option.is-current>.page-switcher-arrow[data-v-07e603fa],.page-option.is-current>.page-switcher-title[data-v-07e603fa]{translate:0 1px}.page-option[data-v-07e603fa]:hover{color:var(--tabs-switcher-accent-color);background-color:transparent}.page-option.is-current[data-v-07e603fa]:hover{color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg)}.page-option-icon[data-v-07e603fa]{width:16px;color:var(--tabs-switcher-accent-color)}@media (max-width:768px){.tabs[data-v-07e603fa]{gap:6px}.page-switcher-title[data-v-07e603fa]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-switcher-sheet[data-v-07e603fa]{width:-moz-max-content;width:max-content;max-width:calc(100vw - 96px)}.page-switcher-sheet[data-v-07e603fa]:before{height:136px;transform:translateY(-3px) scaleY(.72)}.page-option[data-v-07e603fa]{justify-content:flex-start;min-width:0;height:32px;padding:0 10px;font-size:12px;gap:6px}.page-option-icon[data-v-07e603fa]{width:15px}.page-option-list[data-v-07e603fa]{top:36px;transform:translateY(-8px) scaleY(.86)}.page-option-highlight[data-v-07e603fa]{height:32px;transform:translateY(calc(var(--hovered-option-index)*32px))}.page-option.is-current[data-v-07e603fa]{height:32px;gap:5px;padding:0 10px;font-size:1em}.page-option.is-current>.page-option-icon[data-v-07e603fa]{width:16px}.page-option.is-current>.page-switcher-arrow[data-v-07e603fa]{margin-left:4px}.tabs-language-switcher[data-v-07e603fa]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-07e603fa]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.tabs[data-v-07e603fa] #themeToggle,.tabs[data-v-07e603fa] #themeToggle:hover,.tabs[data-v-07e603fa] .language-switcher,.tabs[data-v-07e603fa] .language-switcher:hover{background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.admin-header-content[data-v-1af8d52e]{display:flex;justify-content:space-between;align-items:center;min-height:45px;padding:10px 24px;position:fixed;top:8px;left:50%;width:calc(95% - 16px);z-index:2001;border:1px solid var(--glass-border);border-radius:16px;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.admin-header-content[data-v-1af8d52e],.admin-header-content[data-v-1af8d52e]:hover{background:var(--glass-bg);box-shadow:none;transform:translateX(-50%)}.header-action[data-v-1af8d52e],.header-content .actions[data-v-1af8d52e]{display:flex;align-items:center}.header-action[data-v-1af8d52e]{gap:10px}.header-content .actions[data-v-1af8d52e]{gap:15px}.header-content .actions i[data-v-1af8d52e],.header-icon[data-v-1af8d52e]{font-size:1.5em;cursor:pointer;transition:color .3s ease,transform .3s ease;color:var(--admin-container-color);outline:none}.header-content .actions .el-dropdown-link i[data-v-1af8d52e]:hover,.header-content .actions i[data-v-1af8d52e]:hover,.header-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-1af8d52e]{color:var(--admin-container-color)}.header-content .actions .disabled[data-v-1af8d52e]{color:var(--el-text-color-disabled);pointer-events:none}.header-content .actions .enabled[data-v-1af8d52e]{color:var(--primary-color-accent)}@media (max-width:768px){.admin-header-content[data-v-1af8d52e]{flex-direction:column;top:6px;width:calc(100% - 32px);padding:6px 12px;gap:4px;border-radius:14px}.header-content .actions i[data-v-1af8d52e],.header-icon[data-v-1af8d52e]{font-size:.95em}.header-content .actions[data-v-1af8d52e]{gap:10px;margin-top:10px}}.pagination-container[data-v-1af8d52e]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-1af8d52e]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-1af8d52e] .el-pagination{--el-pagination-button-bg-color:var(--glass-bg);--el-pagination-hover-color:var(--primary-color-accent)}.pagination-container[data-v-1af8d52e] .btn-next,.pagination-container[data-v-1af8d52e] .btn-prev,.pagination-container[data-v-1af8d52e] .el-pager li{min-width:36px;height:36px;margin:0 4px;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--el-text-color-secondary);box-shadow:none;font-weight:500;line-height:36px;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container[data-v-1af8d52e] .btn-next:hover,.pagination-container[data-v-1af8d52e] .btn-prev:hover,.pagination-container[data-v-1af8d52e] .el-pager li:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)}.pagination-container[data-v-1af8d52e] .el-pager li.is-active,.pagination-container[data-v-1af8d52e] .el-pager li.is-active:hover{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none!important}.pagination-right[data-v-1af8d52e]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-jump[data-v-1af8d52e],.page-total[data-v-1af8d52e]{color:var(--el-text-color-secondary);font-size:13px;white-space:nowrap}.page-jump[data-v-1af8d52e]{display:flex;align-items:center;gap:6px}.page-jump .jump-input[data-v-1af8d52e]{width:50px}.page-jump .jump-input[data-v-1af8d52e] .el-input__wrapper{height:28px;padding:0 8px;border:1px solid var(--glass-border);border-radius:8px;background-color:var(--glass-bg)!important;box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.page-jump .jump-input[data-v-1af8d52e] .el-input__inner{height:28px;color:var(--el-text-color-primary);line-height:28px;text-align:center}.pagination-container .refresh-btn[data-v-1af8d52e]{width:36px;min-width:36px;height:36px;padding:0!important;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none;font-size:14px;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .refresh-btn[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none}.page-jump .jump-btn[data-v-1af8d52e],.pagination-container .load-more[data-v-1af8d52e]{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none;font-weight:500;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .load-more[data-v-1af8d52e]{height:36px;padding:0 16px!important;border-radius:10px!important}.page-jump .jump-btn[data-v-1af8d52e]{height:28px;padding:0 12px!important;border-radius:8px!important;font-size:12px;font-weight:600}.page-jump .jump-btn[data-v-1af8d52e]:hover,.pagination-container .load-more[data-v-1af8d52e]:hover{border-color:var(--el-color-primary-dark-2)!important;background:var(--el-color-primary-dark-2)!important;box-shadow:none!important}@media (max-width:768px){.pagination-container[data-v-1af8d52e]{flex-direction:column;gap:8px;margin-top:14px;padding-bottom:10px}.pagination-center[data-v-1af8d52e]{flex-wrap:wrap;justify-content:center;gap:6px;order:0}.pagination-container[data-v-1af8d52e] .el-pager li{min-width:30px;height:30px;margin:0 2px;border-radius:8px!important;font-size:12px;line-height:30px}.pagination-container[data-v-1af8d52e] .btn-next,.pagination-container[data-v-1af8d52e] .btn-prev{display:none!important;position:static!important;min-width:30px!important;width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px}.pagination-right[data-v-1af8d52e]{position:static;width:100%;justify-content:center;gap:6px;order:1}.page-jump[data-v-1af8d52e],.page-total[data-v-1af8d52e]{font-size:12px}.page-jump .jump-input[data-v-1af8d52e]{width:40px}.page-jump .jump-input[data-v-1af8d52e] .el-input__wrapper{height:26px;padding:0 6px;border-radius:7px}.page-jump .jump-input[data-v-1af8d52e] .el-input__inner{height:26px;font-size:12px;line-height:26px}.pagination-container .refresh-btn[data-v-1af8d52e]{width:30px!important;min-width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px!important}.pagination-container .load-more[data-v-1af8d52e]{height:30px!important;min-height:30px!important;padding:0 10px!important;border-radius:8px!important;font-size:12px!important}.page-jump .jump-btn[data-v-1af8d52e]{height:26px;padding:0 10px!important;border-radius:7px!important;font-size:11px}}.container[data-v-1af8d52e]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-1af8d52e] .el-container,[data-v-1af8d52e] .el-main{overflow:visible}[data-v-1af8d52e] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 12px}.search-card[data-v-1af8d52e] .el-input__inner:focus{width:65vw}}.breadcrumb-container[data-v-1af8d52e]{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:0 10px;margin-top:12px;margin-bottom:4px}.breadcrumb-view-toggle[data-v-1af8d52e]{position:relative;height:32px;box-sizing:border-box;flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--glass-border);border-radius:10px;background:var(--glass-bg);box-shadow:none;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.breadcrumb-view-toggle[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.breadcrumb-view-toggle[data-v-1af8d52e]:before{content:"";position:absolute;top:2px;left:2px;width:28px;height:26px;border-radius:5px;background:color-mix(in srgb,var(--primary-color) 12%,transparent);transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.breadcrumb-view-toggle.is-list[data-v-1af8d52e]:before{transform:translateX(30px)}.breadcrumb-view-button[data-v-1af8d52e]{position:relative;z-index:1;width:28px;height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;border-radius:5px;color:var(--el-text-color-secondary);background:transparent;cursor:pointer;transition:color .16s ease}.breadcrumb-view-button[data-v-1af8d52e]:hover{color:var(--primary-color-accent)}.breadcrumb-view-button.is-active[data-v-1af8d52e]{color:var(--primary-color-accent);background:transparent;box-shadow:none}.breadcrumb-view-icon[data-v-1af8d52e]{width:14px;height:14px}.breadcrumb-sort-dropdown[data-v-1af8d52e]{flex:0 0 auto}.breadcrumb-sort-button[data-v-1af8d52e]{width:44px;height:32px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--glass-border);border-radius:10px;color:var(--el-text-color-secondary);background:var(--glass-bg);box-shadow:none;cursor:pointer;transition:color .16s ease,background-color .2s ease,border-color .2s ease}.breadcrumb-sort-button[data-v-1af8d52e]:focus-visible,.breadcrumb-sort-button[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover);color:var(--primary-color-accent)}.breadcrumb-sort-button[data-v-1af8d52e]:focus-visible{outline:none}.breadcrumb-sort-icon[data-v-1af8d52e]{width:30px;height:18px;overflow:visible}.sort-field-glyph[data-v-1af8d52e],.sort-order-glyph[data-v-1af8d52e]{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.sort-order-glyph[data-v-1af8d52e]{stroke-width:1.9}@media (max-width:768px){.breadcrumb-container[data-v-1af8d52e]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-top:8px;margin-bottom:2px}.breadcrumb-view-toggle[data-v-1af8d52e]{height:28px;padding:2px;border-radius:8px}.breadcrumb-view-toggle[data-v-1af8d52e]:before{width:24px;height:22px;border-radius:6px}.breadcrumb-view-toggle.is-list[data-v-1af8d52e]:before{transform:translateX(26px)}.breadcrumb-view-button[data-v-1af8d52e]{width:24px;height:22px;border-radius:6px}.breadcrumb-view-icon[data-v-1af8d52e]{width:12px;height:12px}.breadcrumb-sort-button[data-v-1af8d52e]{width:40px;height:28px;border-radius:8px}.breadcrumb-sort-icon[data-v-1af8d52e]{width:27px;height:16px}}.stats-badge[data-v-1af8d52e]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--glass-bg);padding:4px 12px;border-radius:12px;border:1px solid var(--glass-border);box-shadow:none;transition:background-color .2s ease,border-color .2s ease;white-space:nowrap;flex-shrink:0;margin-left:auto}.stats-badge[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.stats-badge-icon[data-v-1af8d52e]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-1af8d52e]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-1af8d52e]{font-size:9px}}.search-area[data-v-1af8d52e]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-1af8d52e]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-1af8d52e]{display:flex;align-items:center}.search-card[data-v-1af8d52e] .el-input{background:transparent!important;border:none!important;box-shadow:none!important}.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 14px;border-radius:20px;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.search-card[data-v-1af8d52e] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-1af8d52e] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-1af8d52e] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-1af8d52e] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-1af8d52e] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 12px}.search-card[data-v-1af8d52e] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-1af8d52e] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__inner:focus{width:55vw}}.search-icon[data-v-1af8d52e]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-1af8d52e]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.search-card[data-v-1af8d52e] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-1af8d52e]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px);transition:padding-bottom .24s ease}.main-container.has-batch-toolbar[data-v-1af8d52e]{padding-bottom:72px}@media (max-width:768px){.main-container[data-v-1af8d52e]{margin-top:12vh;padding:16px 10px}.main-container.has-batch-toolbar[data-v-1af8d52e]{padding-bottom:86px}}.content[data-v-1af8d52e]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.content.is-drag-selecting[data-v-1af8d52e],.list-view.is-drag-selecting[data-v-1af8d52e]{cursor:crosshair}.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .file-icon,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .folder-icon-svg,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .image-preview,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .video-preview{transform:none}.content.is-drag-selecting[data-v-1af8d52e] .image-preview:hover{opacity:1}.content.is-drag-selecting[data-v-1af8d52e] .action-btn:hover{transform:none;background:hsla(0,0%,100%,.15)}.list-view.is-drag-selecting[data-v-1af8d52e] .list-item:hover{background:transparent}.list-view.is-drag-selecting[data-v-1af8d52e] .list-action-btn:hover{color:var(--el-text-color-regular);background:var(--el-fill-color)}.list-view.is-drag-selecting[data-v-1af8d52e] .list-action-danger:hover{background:var(--el-fill-color)}.empty-state[data-v-1af8d52e]{grid-column:1/-1;grid-row:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-1af8d52e]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-1af8d52e]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-1af8d52e]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-1af8d52e]{padding:80px 20px}@media (max-width:768px){.content[data-v-1af8d52e]{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;gap:8px;margin-top:15px;padding:0;flex-grow:0;min-height:auto;align-content:start;align-items:start}}.list-view[data-v-1af8d52e]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border:1px solid var(--glass-border);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-1af8d52e]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-1af8d52e]{display:flex;align-items:center}.list-col-checkbox[data-v-1af8d52e]{justify-content:center;min-width:40px}.list-col-checkbox[data-v-1af8d52e] .el-checkbox{--el-checkbox-input-width:16px;--el-checkbox-input-height:16px}@media (max-width:768px){.list-header[data-v-1af8d52e]{display:none}}.question-icon[data-v-1af8d52e]{margin:0 3px}.breadcrumb[data-v-1af8d52e]{height:32px;box-sizing:border-box;display:flex;align-items:center;padding:0 12px;background-color:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;font-size:.95em;box-shadow:none;cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.breadcrumb[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.breadcrumb-home-icon[data-v-1af8d52e]{font-size:14px;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.breadcrumb-home-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent)}[data-v-1af8d52e] .el-breadcrumb__item{cursor:pointer}[data-v-1af8d52e] .el-breadcrumb,[data-v-1af8d52e] .el-breadcrumb__inner,[data-v-1af8d52e] .el-breadcrumb__item,[data-v-1af8d52e] .el-breadcrumb__separator{display:inline-flex;align-items:center;height:100%;line-height:32px}[data-v-1af8d52e] .el-breadcrumb__inner{cursor:pointer}[data-v-1af8d52e] .el-breadcrumb__inner:hover{color:var(--primary-color-accent)}.mobile-directory-trigger[data-v-1af8d52e]{display:none;align-items:center;flex:1 1 auto;min-width:0;height:28px;box-sizing:border-box;gap:6px;padding:0 10px;background:var(--glass-bg);border-radius:8px;border:1px solid var(--glass-border);cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.mobile-directory-trigger[data-v-1af8d52e]:active{border-color:var(--glass-border-hover)}.breadcrumb-view-toggle[data-v-1af8d52e],.breadcrumb[data-v-1af8d52e],.mobile-directory-trigger[data-v-1af8d52e],.refresh-btn[data-v-1af8d52e],.stats-badge[data-v-1af8d52e]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.mobile-directory-icon[data-v-1af8d52e]{flex:0 0 auto;font-size:12px;color:var(--primary-color-accent)}.mobile-directory-path[data-v-1af8d52e]{display:block;flex:1 1 auto;min-width:0;font-size:12px;font-weight:500;line-height:1;color:var(--el-text-color-primary);max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-1af8d52e]{flex:0 0 auto;font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-1af8d52e]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-1af8d52e]{display:flex}.desktop-only[data-v-1af8d52e]{display:none!important}.breadcrumb-container[data-v-1af8d52e]{padding:0;margin-left:0;width:100%;box-sizing:border-box}}.drag-select-overlay[data-v-1af8d52e]{position:fixed;background:rgba(24,144,255,.1);border:1px solid rgba(24,144,255,.6);pointer-events:none;z-index:9999;border-radius:2px}.sort-dropdown-menu[data-v-1af8d52e]{min-width:205px}.sort-order-wrapper[data-v-1af8d52e]{padding:0 12px;text-align:center}.sort-divider[data-v-1af8d52e]{margin:8px 0!important}.sort-dropdown-menu[data-v-1af8d52e] .el-dropdown-menu__item{justify-content:space-between}.sort-dropdown-menu[data-v-1af8d52e] .el-dropdown-menu__item.is-selected{color:var(--primary-color-accent)}.sort-field-check[data-v-1af8d52e]{width:12px;margin-left:16px} \ No newline at end of file +.move-dialog-content[data-v-7aaa437c]{padding:0 10px}.move-path-input-container[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.move-path-input[data-v-7aaa437c]{flex:1}.directory-picker-trigger[data-v-7aaa437c]{flex-shrink:0}.move-dialog-hint[data-v-7aaa437c]{margin-top:12px;font-size:12px;color:var(--el-text-color-secondary)}.move-drawer-content[data-v-7aaa437c]{padding:16px}.move-path-section[data-v-7aaa437c]{margin-bottom:16px}.move-path-label[data-v-7aaa437c]{font-size:14px;font-weight:500;margin-bottom:8px;color:var(--el-text-color-primary)}.move-path-input-row[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.embedded-tree-section[data-v-7aaa437c]{margin-top:16px;border:1px solid var(--el-border-color-lighter);border-radius:8px;overflow:hidden}.tree-section-header[data-v-7aaa437c]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-lighter)}.tree-section-title[data-v-7aaa437c]{font-size:14px;font-weight:500}.tree-container[data-v-7aaa437c]{min-height:200px;max-height:300px;overflow-y:auto;padding:8px}.directory-tree[data-v-7aaa437c]{background:transparent}.directory-tree[data-v-7aaa437c] .el-tree-node__content{height:44px;padding:0 8px;border-radius:8px}.tree-node[data-v-7aaa437c]{display:flex;align-items:center;gap:8px;padding:4px 0;width:100%}.tree-node.is-current[data-v-7aaa437c]{color:var(--el-color-primary);font-weight:500}.folder-icon[data-v-7aaa437c]{color:var(--el-color-warning);font-size:16px}.node-label[data-v-7aaa437c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-state[data-v-7aaa437c]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 20px;text-align:center}.error-icon[data-v-7aaa437c]{font-size:32px;color:var(--el-color-danger)}.error-text[data-v-7aaa437c]{color:var(--el-text-color-secondary);font-size:14px}.drawer-footer[data-v-7aaa437c]{display:flex;gap:12px;padding:0 16px 16px}.footer-btn[data-v-7aaa437c]{flex:1}.move-dialog .el-dialog__body{padding:20px}.move-drawer{border-radius:16px 16px 0 0!important}.move-drawer .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.move-drawer .el-drawer__body,.move-drawer .el-drawer__footer{padding:0}.mobile-drawer-overlay[data-v-feeadb1c]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:2000}.mobile-drawer[data-v-feeadb1c]{position:absolute;top:22vh;left:8px;bottom:8px;width:280px;max-width:calc(85vw - 16px);background:var(--el-bg-color);border:1px solid var(--glass-border);border-radius:16px;box-shadow:none;display:flex;flex-direction:column;overflow:hidden}html.dark .mobile-drawer[data-v-feeadb1c]{background:rgba(40,40,45,.98);box-shadow:none}.mobile-drawer-header[data-v-feeadb1c]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:color-mix(in srgb,var(--primary-color) 10%,transparent);border-bottom:1px solid var(--el-border-color-lighter)}.mobile-drawer-title[data-v-feeadb1c]{font-size:15px;font-weight:600;color:var(--primary-color-accent);display:flex;align-items:center;gap:8px}.mobile-drawer-title[data-v-feeadb1c]:before{content:"";display:inline-block;width:4px;height:16px;background:var(--primary-color-accent);border-radius:2px}.mobile-drawer-close[data-v-feeadb1c]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;transition:all .2s ease;background:transparent}.mobile-drawer-close[data-v-feeadb1c]:active{background:var(--el-fill-color);color:var(--el-text-color-primary)}.mobile-drawer-content[data-v-feeadb1c]{flex:1;overflow-y:auto;padding:8px}.mobile-drawer-item[data-v-feeadb1c]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:2px 0;cursor:pointer;transition:all .2s ease;color:var(--el-text-color-primary);border-radius:10px;font-size:14px}.mobile-drawer-item[data-v-feeadb1c]:active{background:var(--el-fill-color-light);transform:scale(.98)}.mobile-drawer-item.active[data-v-feeadb1c]{background:color-mix(in srgb,var(--primary-color) 15%,transparent);color:var(--primary-color-accent);font-weight:600}.mobile-drawer-item-icon[data-v-feeadb1c]{font-size:18px;width:24px;text-align:center;opacity:.7}.mobile-drawer-item.active .mobile-drawer-item-icon[data-v-feeadb1c]{opacity:1;color:var(--primary-color-accent)}.mobile-drawer-back[data-v-feeadb1c]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:8px 8px;border-radius:10px;background:var(--el-fill-color-lighter);cursor:pointer;transition:all .2s ease;color:var(--el-text-color-secondary);font-size:14px}.mobile-drawer-back[data-v-feeadb1c]:active{background:var(--el-fill-color);color:var(--el-text-color-primary);transform:scale(.98)}.drawer-slide-enter-active[data-v-feeadb1c]{transition:opacity .3s ease}.drawer-slide-leave-active[data-v-feeadb1c]{transition:opacity .2s ease}.drawer-slide-enter-active .mobile-drawer[data-v-feeadb1c]{animation:slideInLeft-feeadb1c .3s ease-out}.drawer-slide-leave-active .mobile-drawer[data-v-feeadb1c]{animation:slideOutLeft-feeadb1c .2s ease-in}.drawer-slide-enter-from[data-v-feeadb1c],.drawer-slide-leave-to[data-v-feeadb1c]{opacity:0}@keyframes slideInLeft-feeadb1c{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideOutLeft-feeadb1c{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.bottom-sheet-overlay[data-v-f5c66568]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:flex-end;justify-content:center}.bottom-sheet[data-v-f5c66568]{width:100%;max-width:100%;background:var(--mobile-action-sheet-bg);border-radius:20px 20px 0 0;max-height:70vh;overflow:hidden;box-shadow:none;border-top:1px solid var(--mobile-action-sheet-border)}html.dark .bottom-sheet[data-v-f5c66568]{box-shadow:none}.bottom-sheet-header[data-v-f5c66568]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.bottom-sheet-handle[data-v-f5c66568]{width:40px;height:4px;background:var(--el-border-color);border-radius:2px}.bottom-sheet-title[data-v-f5c66568]{font-size:16px;font-weight:600;color:var(--el-text-color-primary);text-align:center;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bottom-sheet-content[data-v-f5c66568]{padding:12px 16px;padding-bottom:calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.bottom-sheet-item[data-v-f5c66568]{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:14px;cursor:pointer;transition:all .2s ease;background:var(--mobile-action-sheet-item-bg);color:var(--el-text-color-primary)}.bottom-sheet-item[data-v-f5c66568]:active{transform:scale(.98);background:var(--mobile-action-sheet-item-active-bg)}.bottom-sheet-icon[data-v-f5c66568]{font-size:20px;width:28px;text-align:center;color:var(--primary-color-accent)}.bottom-sheet-danger .bottom-sheet-icon[data-v-f5c66568],.bottom-sheet-danger[data-v-f5c66568]{color:var(--el-color-danger)}.bottom-sheet-enter-active[data-v-f5c66568]{transition:all .3s ease-out}.bottom-sheet-leave-active[data-v-f5c66568]{transition:all .2s ease-in}.bottom-sheet-enter-active .bottom-sheet[data-v-f5c66568]{animation:slideUp-f5c66568 .3s ease-out}.bottom-sheet-leave-active .bottom-sheet[data-v-f5c66568]{animation:slideDown-f5c66568 .2s ease-in}.bottom-sheet-enter-from[data-v-f5c66568],.bottom-sheet-leave-to[data-v-f5c66568]{opacity:0}.bottom-sheet-enter-from .bottom-sheet[data-v-f5c66568],.bottom-sheet-leave-to .bottom-sheet[data-v-f5c66568]{transform:translateY(100%)}@keyframes slideUp-f5c66568{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown-f5c66568{0%{transform:translateY(0)}to{transform:translateY(100%)}}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-54f87f24]{padding:0}.tab-content[data-v-54f87f24]{padding:20px}.tab-description[data-v-54f87f24]{margin:0 0 15px 0;color:var(--el-text-color-regular);font-size:14px}.input-section[data-v-54f87f24]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-54f87f24]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-54f87f24]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-54f87f24]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-54f87f24],.tags-to-add-section[data-v-54f87f24]{margin-bottom:20px}.common-tags-section h4[data-v-54f87f24],.tags-to-add-section h4[data-v-54f87f24]{margin:0 0 10px 0;font-size:14px;color:var(--el-text-color-regular)}.tags-container[data-v-54f87f24]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-54f87f24]{cursor:default}.empty-message[data-v-54f87f24]{color:var(--el-text-color-secondary);font-size:13px;padding:10px 0}.action-buttons[data-v-54f87f24]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-1dabc380]{padding:10px 0}.input-section[data-v-1dabc380]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-1dabc380]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-1dabc380]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-1dabc380]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-1dabc380],.popular-tags-section[data-v-1dabc380]{margin-bottom:20px}.current-tags-section h4[data-v-1dabc380],.popular-tags-section h4[data-v-1dabc380]{margin:0 0 10px 0;font-size:14px;color:var(--el-text-color-regular)}.tags-container[data-v-1dabc380]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-1dabc380]{cursor:default}.tag-item.clickable[data-v-1dabc380]{cursor:pointer;transition:transform .2s}.empty-message[data-v-1dabc380]{color:var(--el-text-color-secondary);font-size:13px;padding:10px 0}.dialog-footer[data-v-1dabc380]{display:flex;justify-content:flex-end}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-550287cc]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-550287cc]{margin-left:0!important}.video-preview[data-v-550287cc]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-550287cc],.video-preview[data-v-550287cc]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-550287cc]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-550287cc] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-550287cc]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-550287cc]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border:1px solid var(--glass-border);border-radius:8px;min-height:60px}.preview-content[data-v-550287cc]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-550287cc] .el-descriptions__content{word-break:break-all;word-wrap:break-word}[data-v-550287cc] .el-descriptions__content .el-tag,[data-v-550287cc] .el-descriptions__content .el-tag+span{vertical-align:middle}[data-v-550287cc] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}[data-v-550287cc] .el-descriptions__body table{table-layout:fixed}@media (max-width:768px){.detail-actions[data-v-550287cc]{justify-content:center}}.batch-floating-bar[data-v-49301bcc]{position:fixed;left:50%;bottom:max(84px,calc(72px + env(safe-area-inset-bottom)));transform:translateX(-50%);z-index:1200;display:flex;align-items:center;gap:8px;max-width:min(720px,calc(100vw - 48px));padding:8px;border:1px solid var(--admin-batch-toolbar-border);border-radius:18px;background:var(--admin-batch-toolbar-bg);box-shadow:var(--admin-batch-toolbar-shadow);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.batch-selection-summary[data-v-49301bcc]{display:flex;align-items:center;flex:0 0 auto;padding:0 4px}.batch-selection-count[data-v-49301bcc]{min-width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0 8px;border:1px solid color-mix(in srgb,var(--primary-color) 28%,transparent);border-radius:10px;color:var(--primary-color-accent);background:color-mix(in srgb,var(--primary-color) 10%,transparent);font-size:14px;font-weight:600;line-height:1}.batch-toolbar-divider[data-v-49301bcc]{width:1px;height:24px;flex:0 0 auto;border-radius:999px;background:var(--admin-batch-toolbar-border);opacity:.78}.batch-floating-actions[data-v-49301bcc]{display:flex;align-items:center;gap:6px}.batch-floating-btn[data-v-49301bcc]{width:36px;height:36px;min-width:36px;margin-left:0!important;padding:0;border:1px solid transparent;border-radius:12px;color:var(--admin-batch-clear-color);background:var(--admin-batch-action-bg);box-shadow:var(--admin-batch-action-shadow);transition:border-color .2s ease,background-color .2s ease,color .2s ease}.batch-floating-btn[data-v-49301bcc]:hover{border-color:var(--glass-border-hover);color:var(--primary-color-accent);background:var(--admin-batch-action-hover-bg);box-shadow:var(--admin-batch-action-hover-shadow)}.batch-floating-btn.ban[data-v-49301bcc],.batch-floating-btn.copy[data-v-49301bcc],.batch-floating-btn.download[data-v-49301bcc],.batch-floating-btn.move[data-v-49301bcc],.batch-floating-btn.tag[data-v-49301bcc],.batch-floating-btn.white[data-v-49301bcc]{color:var(--admin-batch-action-color)}.batch-floating-btn.danger[data-v-49301bcc]{color:var(--admin-batch-delete-color)}.batch-floating-btn.danger[data-v-49301bcc]:hover{border-color:color-mix(in srgb,var(--admin-batch-delete-color) 32%,transparent);color:var(--admin-batch-delete-color);background:color-mix(in srgb,var(--admin-batch-delete-color) 10%,transparent)}.batch-floating-btn.ghost[data-v-49301bcc]{color:var(--admin-batch-clear-color)}.batch-floating-icon[data-v-49301bcc]{width:15px;margin-right:0}.batch-toolbar-enter-active[data-v-49301bcc],.batch-toolbar-leave-active[data-v-49301bcc]{transition:opacity .24s ease,transform .28s cubic-bezier(.22,1,.36,1)}.batch-toolbar-enter-from[data-v-49301bcc],.batch-toolbar-leave-to[data-v-49301bcc]{opacity:0;transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-49301bcc],.batch-toolbar-leave-from[data-v-49301bcc]{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}@media (max-width:768px){.batch-floating-bar[data-v-49301bcc]{left:50%;right:auto;bottom:max(76px,calc(64px + env(safe-area-inset-bottom)));transform:translateX(-50%);width:-moz-max-content;width:max-content;max-width:calc(100vw - 24px);gap:6px;padding:6px;border-radius:16px}.batch-selection-summary[data-v-49301bcc]{padding:0 1px}.batch-selection-count[data-v-49301bcc]{min-width:24px;height:26px;padding:0 7px;font-size:12px;border-radius:9px}.batch-toolbar-divider[data-v-49301bcc]{height:22px}.batch-floating-actions[data-v-49301bcc]{flex:1;min-width:0;gap:4px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:1px}.batch-floating-actions[data-v-49301bcc]::-webkit-scrollbar{display:none}.batch-floating-btn[data-v-49301bcc]{width:30px;height:30px;min-width:30px;padding:0;border-radius:10px}.batch-floating-icon[data-v-49301bcc]{margin-right:0;width:13px}.batch-toolbar-enter-from[data-v-49301bcc],.batch-toolbar-leave-to[data-v-49301bcc]{transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-49301bcc],.batch-toolbar-leave-from[data-v-49301bcc]{transform:translateX(-50%) translateY(0) scale(1)}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-25a3242c]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:65px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-25a3242c]:last-child{border-bottom:none}.list-item[data-v-25a3242c]:hover{background:var(--el-fill-color-light)}.list-col[data-v-25a3242c]{display:flex;align-items:center}.list-col-checkbox[data-v-25a3242c]{justify-content:center;min-width:40px}.list-col-checkbox[data-v-25a3242c] .el-checkbox{--el-checkbox-input-width:16px;--el-checkbox-input-height:16px}.list-col-preview[data-v-25a3242c]{justify-content:center;cursor:pointer}.list-col-name[data-v-25a3242c]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-25a3242c]:hover{color:var(--primary-color-accent)}.filename-ellipsis[data-v-25a3242c]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-25a3242c]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-25a3242c]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-25a3242c],.list-col-channel[data-v-25a3242c],.list-col-date[data-v-25a3242c],.list-col-size[data-v-25a3242c]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-25a3242c]{font-size:13px}.address-box[data-v-25a3242c],.channel-name-box[data-v-25a3242c]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-25a3242c]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-25a3242c]{width:70px}.address-box[data-v-25a3242c]::-webkit-scrollbar,.channel-name-box[data-v-25a3242c]::-webkit-scrollbar{display:none}.list-col-tags[data-v-25a3242c]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.color-tag[data-v-25a3242c]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-25a3242c]{min-width:30px;text-align:center}.list-empty[data-v-25a3242c]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-25a3242c]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-25a3242c]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-25a3242c]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-25a3242c]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-25a3242c]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-25a3242c]:hover{background:var(--primary-color);color:#fff}.list-action-danger[data-v-25a3242c]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-25a3242c]{grid-template-columns:20px 34px 1fr auto;padding:8px 6px;gap:6px;font-size:12px}.list-col-address[data-v-25a3242c],.list-col-channel-name[data-v-25a3242c],.list-col-channel[data-v-25a3242c],.list-col-date[data-v-25a3242c],.list-col-size[data-v-25a3242c],.list-col-tags[data-v-25a3242c]{display:none}.list-col-name[data-v-25a3242c]{padding-right:8px;line-height:1.25}.list-preview-img[data-v-25a3242c]{width:34px;height:34px;border-radius:5px}.list-folder-icon[data-v-25a3242c]{font-size:24px}.list-file-icon[data-v-25a3242c]{font-size:21px}.list-col-actions[data-v-25a3242c]{gap:3px}.list-action-btn[data-v-25a3242c]{width:26px;height:26px;border-radius:7px;font-size:12px}.list-col-checkbox[data-v-25a3242c]{width:18px;min-width:18px}.list-col-checkbox[data-v-25a3242c] .el-checkbox{--el-checkbox-input-width:14px;--el-checkbox-input-height:14px}}.img-card[data-v-956fb02e]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-956fb02e]:before{content:"";position:absolute;top:0;left:0;right:0;height:45%;background:linear-gradient(180deg,rgba(0,0,0,.35) 0,rgba(0,0,0,.12) 50%,transparent);pointer-events:none;z-index:5}.img-card[data-v-956fb02e] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-956fb02e] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-956fb02e] .el-checkbox__inner{width:14px!important;min-width:14px;height:14px!important;min-height:14px;border-radius:50%!important}.img-card[data-v-956fb02e]:hover{transform:scale(1.05)}.image-preview[data-v-956fb02e],.video-preview[data-v-956fb02e]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-956fb02e]{cursor:pointer}.img-card:hover .file-icon[data-v-956fb02e],.img-card:hover .image-preview[data-v-956fb02e],.img-card:hover .video-preview[data-v-956fb02e]{transform:scale(1.03)}.image-preview[data-v-956fb02e]:hover{opacity:.8}.file-short-info[data-v-956fb02e]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-956fb02e]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-956fb02e],.success-tag[data-v-956fb02e]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3)}.fail-tag[data-v-956fb02e]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-956fb02e]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3)}.file-preview[data-v-956fb02e]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-956fb02e]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-956fb02e]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-956fb02e]{cursor:pointer}.card-bottom-overlay[data-v-956fb02e]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-956fb02e]{display:flex;align-items:center;justify-content:center}.file-name[data-v-956fb02e]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-956fb02e]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-956fb02e]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-956fb02e],.action-bar-right[data-v-956fb02e]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-956fb02e]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-956fb02e]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-956fb02e]:active{transform:scale(.95)}.action-btn-danger[data-v-956fb02e]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.img-card[data-v-956fb02e]{height:148px;border-radius:7px;contain-intrinsic-size:148px}.img-card[data-v-956fb02e] .el-checkbox{top:6px;right:6px;transform:scale(1.1)}.img-card[data-v-956fb02e]:hover{transform:none}.file-short-info[data-v-956fb02e]{gap:3px;max-width:calc(100% - 38px)}.fail-tag[data-v-956fb02e],.primary-tag[data-v-956fb02e],.success-tag[data-v-956fb02e]{max-width:72px;padding:2px 5px;border-radius:5px;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-bottom-overlay[data-v-956fb02e]{padding:22px 6px 6px}.file-name[data-v-956fb02e]{font-size:11px}.file-icon[data-v-956fb02e]{font-size:34px}.action-bar[data-v-956fb02e]{display:none!important}}@keyframes skeleton-shimmer-956fb02e{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-956fb02e]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-956fb02e 1.5s ease-in-out infinite}.error-wrapper[data-v-956fb02e]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-956fb02e]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-956fb02e]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-534cf01b]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-534cf01b] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-534cf01b] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-534cf01b] .el-checkbox__inner{width:14px!important;min-width:14px;height:14px!important;min-height:14px;border-radius:50%!important}.img-card[data-v-534cf01b]:hover{transform:scale(1.05)}.folder-card[data-v-534cf01b]{cursor:pointer}.folder-icon[data-v-534cf01b]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-534cf01b]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-534cf01b]{transform:scale(1.03)}.card-bottom-overlay[data-v-534cf01b]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-534cf01b]{display:flex;align-items:center;justify-content:center}.file-name[data-v-534cf01b]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-534cf01b]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-534cf01b]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-534cf01b],.action-bar-right[data-v-534cf01b]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-534cf01b]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-534cf01b]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-534cf01b]:active{transform:scale(.95)}.action-btn-danger[data-v-534cf01b]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.img-card[data-v-534cf01b]{height:148px;border-radius:7px;contain-intrinsic-size:148px}.img-card[data-v-534cf01b] .el-checkbox{top:6px;right:6px;transform:scale(1.1)}.img-card[data-v-534cf01b]:hover{transform:none}.folder-icon-svg[data-v-534cf01b]{font-size:36px}.card-bottom-overlay[data-v-534cf01b]{padding:22px 6px 6px}.file-name[data-v-534cf01b]{font-size:11px}.action-bar[data-v-534cf01b]{display:none!important}}@keyframes skeleton-shimmer-070880ec{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-070880ec{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-070880ec]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border:1px solid var(--glass-border);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-070880ec]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-info[data-v-070880ec]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5)}.skeleton-text[data-v-070880ec]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-list-item[data-v-070880ec]{animation:skeleton-pulse-070880ec 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-070880ec]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-070880ec]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-text-long[data-v-070880ec]{width:80%}.skeleton-text-long[data-v-070880ec],.skeleton-text-short[data-v-070880ec]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-text-short[data-v-070880ec]{width:60px}.skeleton-text-tiny[data-v-070880ec]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-070880ec],.skeleton-text-tiny[data-v-070880ec]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-070880ec 1.5s ease-in-out infinite}.skeleton-tag[data-v-070880ec]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-070880ec]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-070880ec]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-070880ec]{display:flex;align-items:center}.list-col-checkbox[data-v-070880ec],.list-col-preview[data-v-070880ec]{justify-content:center}@media (max-width:768px){.skeleton-card[data-v-070880ec]{height:148px;border-radius:7px}.skeleton-info[data-v-070880ec]{padding:22px 6px 6px}.skeleton-text[data-v-070880ec]{height:11px;width:68%;border-radius:3px}.list-item[data-v-070880ec]{box-sizing:border-box;grid-template-columns:20px 34px 1fr auto;padding:8px 6px;gap:6px;height:50px}.skeleton-checkbox[data-v-070880ec]{width:16px;height:16px}.skeleton-preview[data-v-070880ec]{width:34px;height:34px;border-radius:5px}.skeleton-text-long[data-v-070880ec],.skeleton-text-short[data-v-070880ec],.skeleton-text-tiny[data-v-070880ec]{height:10px;border-radius:3px}.skeleton-actions[data-v-070880ec]{width:58px;height:24px;border-radius:6px}.list-col-address[data-v-070880ec],.list-col-channel-name[data-v-070880ec],.list-col-channel[data-v-070880ec],.list-col-date[data-v-070880ec],.list-col-size[data-v-070880ec],.list-col-tags[data-v-070880ec]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.dashboard-checkbox[data-v-3757bfa7]{box-sizing:border-box;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;color:#fff;cursor:pointer;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]{position:relative;width:32px;height:32px;overflow:hidden;border:1px solid var(--glass-border);border-radius:10px;background:var(--glass-bg);box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .2s ease,border-color .2s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:before{content:"";position:absolute;inset:7px;box-sizing:border-box;border:1px solid var(--glass-border);border-radius:50%;background:transparent;transition:border-color .18s ease,background .18s ease}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:hover{border-color:var(--glass-border-hover)}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:focus-visible{outline:none;border-color:color-mix(in srgb,var(--primary-color-accent) 42%,transparent)}.dashboard-checkbox--breadcrumb.checked[data-v-3757bfa7],.dashboard-checkbox--breadcrumb.indeterminate[data-v-3757bfa7]{border-color:var(--glass-border);background:var(--glass-bg)}.dashboard-checkbox--breadcrumb.checked[data-v-3757bfa7]:before,.dashboard-checkbox--breadcrumb.indeterminate[data-v-3757bfa7]:before{border-color:hsla(0,0%,100%,.4);background:var(--primary-color)}.dashboard-checkbox-mark[data-v-3757bfa7]{position:relative;z-index:1;width:10px;height:10px;opacity:0;transform:scale(.72);transition:opacity .16s ease,transform .16s ease}.dashboard-checkbox.checked .dashboard-checkbox-mark[data-v-3757bfa7],.dashboard-checkbox.indeterminate .dashboard-checkbox-mark[data-v-3757bfa7]{opacity:1;transform:scale(1)}.dashboard-checkbox--breadcrumb .dashboard-checkbox-mark[data-v-3757bfa7]{width:11px;height:11px}@media (max-width:768px){.dashboard-checkbox--breadcrumb[data-v-3757bfa7]{width:28px;height:28px;border-radius:8px}.dashboard-checkbox--breadcrumb[data-v-3757bfa7]:before{inset:6px}.dashboard-checkbox--breadcrumb .dashboard-checkbox-mark[data-v-3757bfa7]{width:10px;height:10px}}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-42919522]{flex-shrink:0}.filter-trigger[data-v-42919522]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-42919522]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-42919522]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.filter-badge[data-v-42919522] .el-badge__content{background:var(--primary-color);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-42919522]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-42919522]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-42919522]:last-of-type{border-bottom:none}.filter-title[data-v-42919522]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-42919522],.filter-options[data-v-42919522] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-42919522] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:6px;transition:all .2s ease}.filter-options[data-v-42919522] .el-checkbox:hover{background:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent)}html.dark .filter-options[data-v-42919522] .el-checkbox:hover{background:color-mix(in srgb,var(--el-text-color-primary) 14%,transparent)}.filter-options[data-v-42919522] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-42919522] .el-checkbox__input.is-checked+.el-checkbox__label{color:var(--primary-color-accent)}.channel-group-title[data-v-42919522]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-42919522]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-42919522] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--primary-color);border-color:var(--primary-color)}.filter-actions[data-v-42919522]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-42919522]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-42919522]:hover:not(:disabled){background:var(--primary-color);border-color:var(--primary-color-accent);color:#fff}.filter-actions .el-button[data-v-42919522]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-42919522]{min-width:160px;max-height:320px}.filter-section[data-v-42919522]{padding:6px 10px}.filter-title[data-v-42919522]{font-size:11px;margin-bottom:4px}.filter-options[data-v-42919522] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-42919522] .el-checkbox__label{font-size:12px}.header-icon[data-v-42919522]{font-size:1.2em}}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.tabs[data-v-2fe4fd26]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-2fe4fd26]{position:relative;display:grid;align-items:start;height:44px;overflow:visible}.page-switcher.is-open[data-v-2fe4fd26]{z-index:1200}.page-switcher-sheet[data-v-2fe4fd26]{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px;border:1px solid transparent;border-radius:14px;box-sizing:border-box;background-color:transparent;overflow:visible;transition:none}.page-switcher-sheet[data-v-2fe4fd26]:before{content:"";position:absolute;top:0;left:0;right:0;z-index:0;height:160px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);opacity:0;transform:translateY(-4px) scaleY(.72);transform-origin:top center;pointer-events:none;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.page-switcher.is-open .page-switcher-sheet[data-v-2fe4fd26]:before{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.page-switcher-title[data-v-2fe4fd26]{line-height:1}.page-switcher-arrow[data-v-2fe4fd26]{margin-left:auto;font-size:.75em;color:var(--tabs-switcher-accent-color);transition:transform .3s ease}.page-switcher.is-open .page-switcher-arrow[data-v-2fe4fd26]{transform:rotate(180deg)}.page-option[data-v-2fe4fd26]{position:relative;z-index:1;display:inline-flex;flex:0 0 auto;align-items:center;box-sizing:border-box;gap:7px;width:100%;min-width:148px;height:37px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:15px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:none}.page-option-list[data-v-2fe4fd26]{position:absolute;top:45px;left:5px;right:5px;display:flex;flex-direction:column;align-items:stretch;opacity:0;pointer-events:none;transform:translateY(-9px) scaleY(.86);transform-origin:top center;transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-list .page-option[data-v-2fe4fd26]{position:relative;z-index:1;width:100%}.page-option-highlight[data-v-2fe4fd26]{position:absolute;top:0;left:0;right:0;z-index:0;height:37px;border-radius:10px;background:var(--tabs-switcher-hover-bg);opacity:0;pointer-events:none;transform:translateY(calc(var(--hovered-option-index)*37px));transition:opacity .3s ease,transform .3s cubic-bezier(.22,1,.36,1)}.page-option-highlight.is-visible[data-v-2fe4fd26]{opacity:1}.page-switcher.is-open .page-option-list[data-v-2fe4fd26]{opacity:1;pointer-events:auto;transform:translateY(0) scaleY(1)}.page-option.is-current[data-v-2fe4fd26]{height:37px;gap:8px;padding:0 14px;color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg);border:1px solid var(--tabs-switcher-current-border-color);box-shadow:none;font-size:1.1em;font-weight:700;line-height:1.15}.page-option.is-current>.page-option-icon[data-v-2fe4fd26]{width:17px;font-size:1.05em}.page-option.is-current>.page-option-icon[data-v-2fe4fd26],.page-option.is-current>.page-switcher-arrow[data-v-2fe4fd26],.page-option.is-current>.page-switcher-title[data-v-2fe4fd26]{translate:0 1px}.page-option[data-v-2fe4fd26]:hover{color:var(--tabs-switcher-accent-color);background-color:transparent}.page-option.is-current[data-v-2fe4fd26]:hover{color:var(--tabs-switcher-current-color);background:var(--tabs-switcher-current-bg)}.page-option-icon[data-v-2fe4fd26]{width:16px;color:var(--tabs-switcher-accent-color)}@media (max-width:768px){.tabs[data-v-2fe4fd26]{gap:6px}.page-switcher-title[data-v-2fe4fd26]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-switcher-sheet[data-v-2fe4fd26]{width:-moz-max-content;width:max-content;max-width:calc(100vw - 96px)}.page-switcher-sheet[data-v-2fe4fd26]:before{height:140px;transform:translateY(-3px) scaleY(.72)}.page-option[data-v-2fe4fd26]{justify-content:flex-start;min-width:0;height:32px;padding:0 10px;font-size:12px;gap:6px}.page-option-icon[data-v-2fe4fd26]{width:15px}.page-option-list[data-v-2fe4fd26]{top:40px;transform:translateY(-8px) scaleY(.86)}.page-option-highlight[data-v-2fe4fd26]{height:32px;transform:translateY(calc(var(--hovered-option-index)*32px))}.page-option.is-current[data-v-2fe4fd26]{height:32px;gap:5px;padding:0 10px;font-size:1em}.page-option.is-current>.page-option-icon[data-v-2fe4fd26]{width:16px}.page-option.is-current>.page-switcher-arrow[data-v-2fe4fd26]{margin-left:4px}.tabs-language-switcher[data-v-2fe4fd26]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-2fe4fd26]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.tabs[data-v-2fe4fd26] #themeToggle,.tabs[data-v-2fe4fd26] #themeToggle:hover,.tabs[data-v-2fe4fd26] .language-switcher,.tabs[data-v-2fe4fd26] .language-switcher:hover{background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.admin-header-content[data-v-1af8d52e]{display:flex;justify-content:space-between;align-items:center;min-height:45px;padding:10px 24px;position:fixed;top:8px;left:50%;width:calc(95% - 16px);z-index:2001;border:1px solid var(--glass-border);border-radius:16px;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.admin-header-content[data-v-1af8d52e],.admin-header-content[data-v-1af8d52e]:hover{background:var(--glass-bg);box-shadow:none;transform:translateX(-50%)}.header-action[data-v-1af8d52e],.header-content .actions[data-v-1af8d52e]{display:flex;align-items:center}.header-action[data-v-1af8d52e]{gap:10px}.header-content .actions[data-v-1af8d52e]{gap:15px}.header-content .actions i[data-v-1af8d52e],.header-icon[data-v-1af8d52e]{font-size:1.5em;cursor:pointer;transition:color .3s ease,transform .3s ease;color:var(--admin-container-color);outline:none}.header-content .actions .el-dropdown-link i[data-v-1af8d52e]:hover,.header-content .actions i[data-v-1af8d52e]:hover,.header-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-1af8d52e]{color:var(--admin-container-color)}.header-content .actions .disabled[data-v-1af8d52e]{color:var(--el-text-color-disabled);pointer-events:none}.header-content .actions .enabled[data-v-1af8d52e]{color:var(--primary-color-accent)}@media (max-width:768px){.admin-header-content[data-v-1af8d52e]{flex-direction:column;top:6px;width:calc(100% - 32px);padding:6px 12px;gap:4px;border-radius:14px}.header-content .actions i[data-v-1af8d52e],.header-icon[data-v-1af8d52e]{font-size:.95em}.header-content .actions[data-v-1af8d52e]{gap:10px;margin-top:10px}}.pagination-container[data-v-1af8d52e]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-1af8d52e]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-1af8d52e] .el-pagination{--el-pagination-button-bg-color:var(--glass-bg);--el-pagination-hover-color:var(--primary-color-accent)}.pagination-container[data-v-1af8d52e] .btn-next,.pagination-container[data-v-1af8d52e] .btn-prev,.pagination-container[data-v-1af8d52e] .el-pager li{min-width:36px;height:36px;margin:0 4px;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--el-text-color-secondary);box-shadow:none;font-weight:500;line-height:36px;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container[data-v-1af8d52e] .btn-next:hover,.pagination-container[data-v-1af8d52e] .btn-prev:hover,.pagination-container[data-v-1af8d52e] .el-pager li:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)}.pagination-container[data-v-1af8d52e] .el-pager li.is-active,.pagination-container[data-v-1af8d52e] .el-pager li.is-active:hover{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none!important}.pagination-right[data-v-1af8d52e]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-jump[data-v-1af8d52e],.page-total[data-v-1af8d52e]{color:var(--el-text-color-secondary);font-size:13px;white-space:nowrap}.page-jump[data-v-1af8d52e]{display:flex;align-items:center;gap:6px}.page-jump .jump-input[data-v-1af8d52e]{width:50px}.page-jump .jump-input[data-v-1af8d52e] .el-input__wrapper{height:28px;padding:0 8px;border:1px solid var(--glass-border);border-radius:8px;background-color:var(--glass-bg)!important;box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.page-jump .jump-input[data-v-1af8d52e] .el-input__inner{height:28px;color:var(--el-text-color-primary);line-height:28px;text-align:center}.pagination-container .refresh-btn[data-v-1af8d52e]{width:36px;min-width:36px;height:36px;padding:0!important;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none;font-size:14px;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .refresh-btn[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none}.page-jump .jump-btn[data-v-1af8d52e],.pagination-container .load-more[data-v-1af8d52e]{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none;font-weight:500;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .load-more[data-v-1af8d52e]{height:36px;padding:0 16px!important;border-radius:10px!important}.page-jump .jump-btn[data-v-1af8d52e]{height:28px;padding:0 12px!important;border-radius:8px!important;font-size:12px;font-weight:600}.page-jump .jump-btn[data-v-1af8d52e]:hover,.pagination-container .load-more[data-v-1af8d52e]:hover{border-color:var(--el-color-primary-dark-2)!important;background:var(--el-color-primary-dark-2)!important;box-shadow:none!important}@media (max-width:768px){.pagination-container[data-v-1af8d52e]{flex-direction:column;gap:8px;margin-top:14px;padding-bottom:10px}.pagination-center[data-v-1af8d52e]{flex-wrap:wrap;justify-content:center;gap:6px;order:0}.pagination-container[data-v-1af8d52e] .el-pager li{min-width:30px;height:30px;margin:0 2px;border-radius:8px!important;font-size:12px;line-height:30px}.pagination-container[data-v-1af8d52e] .btn-next,.pagination-container[data-v-1af8d52e] .btn-prev{display:none!important;position:static!important;min-width:30px!important;width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px}.pagination-right[data-v-1af8d52e]{position:static;width:100%;justify-content:center;gap:6px;order:1}.page-jump[data-v-1af8d52e],.page-total[data-v-1af8d52e]{font-size:12px}.page-jump .jump-input[data-v-1af8d52e]{width:40px}.page-jump .jump-input[data-v-1af8d52e] .el-input__wrapper{height:26px;padding:0 6px;border-radius:7px}.page-jump .jump-input[data-v-1af8d52e] .el-input__inner{height:26px;font-size:12px;line-height:26px}.pagination-container .refresh-btn[data-v-1af8d52e]{width:30px!important;min-width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px!important}.pagination-container .load-more[data-v-1af8d52e]{height:30px!important;min-height:30px!important;padding:0 10px!important;border-radius:8px!important;font-size:12px!important}.page-jump .jump-btn[data-v-1af8d52e]{height:26px;padding:0 10px!important;border-radius:7px!important;font-size:11px}}.container[data-v-1af8d52e]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-1af8d52e] .el-container,[data-v-1af8d52e] .el-main{overflow:visible}[data-v-1af8d52e] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 12px}.search-card[data-v-1af8d52e] .el-input__inner:focus{width:65vw}}.breadcrumb-container[data-v-1af8d52e]{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:0 10px;margin-top:12px;margin-bottom:4px}.breadcrumb-view-toggle[data-v-1af8d52e]{position:relative;height:32px;box-sizing:border-box;flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--glass-border);border-radius:10px;background:var(--glass-bg);box-shadow:none;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.breadcrumb-view-toggle[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.breadcrumb-view-toggle[data-v-1af8d52e]:before{content:"";position:absolute;top:2px;left:2px;width:28px;height:26px;border-radius:5px;background:color-mix(in srgb,var(--primary-color) 12%,transparent);transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.breadcrumb-view-toggle.is-list[data-v-1af8d52e]:before{transform:translateX(30px)}.breadcrumb-view-button[data-v-1af8d52e]{position:relative;z-index:1;width:28px;height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;border-radius:5px;color:var(--el-text-color-secondary);background:transparent;cursor:pointer;transition:color .16s ease}.breadcrumb-view-button[data-v-1af8d52e]:hover{color:var(--primary-color-accent)}.breadcrumb-view-button.is-active[data-v-1af8d52e]{color:var(--primary-color-accent);background:transparent;box-shadow:none}.breadcrumb-view-icon[data-v-1af8d52e]{width:14px;height:14px}.breadcrumb-sort-dropdown[data-v-1af8d52e]{flex:0 0 auto}.breadcrumb-sort-button[data-v-1af8d52e]{width:44px;height:32px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--glass-border);border-radius:10px;color:var(--el-text-color-secondary);background:var(--glass-bg);box-shadow:none;cursor:pointer;transition:color .16s ease,background-color .2s ease,border-color .2s ease}.breadcrumb-sort-button[data-v-1af8d52e]:focus-visible,.breadcrumb-sort-button[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover);color:var(--primary-color-accent)}.breadcrumb-sort-button[data-v-1af8d52e]:focus-visible{outline:none}.breadcrumb-sort-icon[data-v-1af8d52e]{width:30px;height:18px;overflow:visible}.sort-field-glyph[data-v-1af8d52e],.sort-order-glyph[data-v-1af8d52e]{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.sort-order-glyph[data-v-1af8d52e]{stroke-width:1.9}@media (max-width:768px){.breadcrumb-container[data-v-1af8d52e]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-top:8px;margin-bottom:2px}.breadcrumb-view-toggle[data-v-1af8d52e]{height:28px;padding:2px;border-radius:8px}.breadcrumb-view-toggle[data-v-1af8d52e]:before{width:24px;height:22px;border-radius:6px}.breadcrumb-view-toggle.is-list[data-v-1af8d52e]:before{transform:translateX(26px)}.breadcrumb-view-button[data-v-1af8d52e]{width:24px;height:22px;border-radius:6px}.breadcrumb-view-icon[data-v-1af8d52e]{width:12px;height:12px}.breadcrumb-sort-button[data-v-1af8d52e]{width:40px;height:28px;border-radius:8px}.breadcrumb-sort-icon[data-v-1af8d52e]{width:27px;height:16px}}.stats-badge[data-v-1af8d52e]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--glass-bg);padding:4px 12px;border-radius:12px;border:1px solid var(--glass-border);box-shadow:none;transition:background-color .2s ease,border-color .2s ease;white-space:nowrap;flex-shrink:0;margin-left:auto}.stats-badge[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.stats-badge-icon[data-v-1af8d52e]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-1af8d52e]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-1af8d52e]{font-size:9px}}.search-area[data-v-1af8d52e]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-1af8d52e]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-1af8d52e]{display:flex;align-items:center}.search-card[data-v-1af8d52e] .el-input{background:transparent!important;border:none!important;box-shadow:none!important}.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 14px;border-radius:20px;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.search-card[data-v-1af8d52e] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-1af8d52e] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-1af8d52e] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-1af8d52e] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-1af8d52e] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__wrapper{padding:0 12px}.search-card[data-v-1af8d52e] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-1af8d52e] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-1af8d52e] .el-input__inner:focus{width:55vw}}.search-icon[data-v-1af8d52e]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-1af8d52e]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.search-card[data-v-1af8d52e] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-1af8d52e]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px);transition:padding-bottom .24s ease}.main-container.has-batch-toolbar[data-v-1af8d52e]{padding-bottom:72px}@media (max-width:768px){.main-container[data-v-1af8d52e]{margin-top:12vh;padding:16px 10px}.main-container.has-batch-toolbar[data-v-1af8d52e]{padding-bottom:86px}}.content[data-v-1af8d52e]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.content.is-drag-selecting[data-v-1af8d52e],.list-view.is-drag-selecting[data-v-1af8d52e]{cursor:crosshair}.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .file-icon,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .folder-icon-svg,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .image-preview,.content.is-drag-selecting[data-v-1af8d52e] .img-card:hover .video-preview{transform:none}.content.is-drag-selecting[data-v-1af8d52e] .image-preview:hover{opacity:1}.content.is-drag-selecting[data-v-1af8d52e] .action-btn:hover{transform:none;background:hsla(0,0%,100%,.15)}.list-view.is-drag-selecting[data-v-1af8d52e] .list-item:hover{background:transparent}.list-view.is-drag-selecting[data-v-1af8d52e] .list-action-btn:hover{color:var(--el-text-color-regular);background:var(--el-fill-color)}.list-view.is-drag-selecting[data-v-1af8d52e] .list-action-danger:hover{background:var(--el-fill-color)}.empty-state[data-v-1af8d52e]{grid-column:1/-1;grid-row:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-1af8d52e]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-1af8d52e]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-1af8d52e]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-1af8d52e]{padding:80px 20px}@media (max-width:768px){.content[data-v-1af8d52e]{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;gap:8px;margin-top:15px;padding:0;flex-grow:0;min-height:auto;align-content:start;align-items:start}}.list-view[data-v-1af8d52e]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border:1px solid var(--glass-border);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-1af8d52e]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-1af8d52e]{display:flex;align-items:center}.list-col-checkbox[data-v-1af8d52e]{justify-content:center;min-width:40px}.list-col-checkbox[data-v-1af8d52e] .el-checkbox{--el-checkbox-input-width:16px;--el-checkbox-input-height:16px}@media (max-width:768px){.list-header[data-v-1af8d52e]{display:none}}.question-icon[data-v-1af8d52e]{margin:0 3px}.breadcrumb[data-v-1af8d52e]{height:32px;box-sizing:border-box;display:flex;align-items:center;padding:0 12px;background-color:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;font-size:.95em;box-shadow:none;cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.breadcrumb[data-v-1af8d52e]:hover{border-color:var(--glass-border-hover)}.breadcrumb-home-icon[data-v-1af8d52e]{font-size:14px;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.breadcrumb-home-icon[data-v-1af8d52e]:hover{color:var(--primary-color-accent)}[data-v-1af8d52e] .el-breadcrumb__item{cursor:pointer}[data-v-1af8d52e] .el-breadcrumb,[data-v-1af8d52e] .el-breadcrumb__inner,[data-v-1af8d52e] .el-breadcrumb__item,[data-v-1af8d52e] .el-breadcrumb__separator{display:inline-flex;align-items:center;height:100%;line-height:32px}[data-v-1af8d52e] .el-breadcrumb__inner{cursor:pointer}[data-v-1af8d52e] .el-breadcrumb__inner:hover{color:var(--primary-color-accent)}.mobile-directory-trigger[data-v-1af8d52e]{display:none;align-items:center;flex:1 1 auto;min-width:0;height:28px;box-sizing:border-box;gap:6px;padding:0 10px;background:var(--glass-bg);border-radius:8px;border:1px solid var(--glass-border);cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.mobile-directory-trigger[data-v-1af8d52e]:active{border-color:var(--glass-border-hover)}.breadcrumb-view-toggle[data-v-1af8d52e],.breadcrumb[data-v-1af8d52e],.mobile-directory-trigger[data-v-1af8d52e],.refresh-btn[data-v-1af8d52e],.stats-badge[data-v-1af8d52e]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.mobile-directory-icon[data-v-1af8d52e]{flex:0 0 auto;font-size:12px;color:var(--primary-color-accent)}.mobile-directory-path[data-v-1af8d52e]{display:block;flex:1 1 auto;min-width:0;font-size:12px;font-weight:500;line-height:1;color:var(--el-text-color-primary);max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-1af8d52e]{flex:0 0 auto;font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-1af8d52e]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-1af8d52e]{display:flex}.desktop-only[data-v-1af8d52e]{display:none!important}.breadcrumb-container[data-v-1af8d52e]{padding:0;margin-left:0;width:100%;box-sizing:border-box}}.drag-select-overlay[data-v-1af8d52e]{position:fixed;background:rgba(24,144,255,.1);border:1px solid rgba(24,144,255,.6);pointer-events:none;z-index:9999;border-radius:2px}.sort-dropdown-menu[data-v-1af8d52e]{min-width:205px}.sort-order-wrapper[data-v-1af8d52e]{padding:0 12px;text-align:center}.sort-divider[data-v-1af8d52e]{margin:8px 0!important}.sort-dropdown-menu[data-v-1af8d52e] .el-dropdown-menu__item{justify-content:space-between}.sort-dropdown-menu[data-v-1af8d52e] .el-dropdown-menu__item.is-selected{color:var(--primary-color-accent)}.sort-field-check[data-v-1af8d52e]{width:12px;margin-left:16px} \ No newline at end of file diff --git a/frontend-dist/css/596.292a1dcd.css.gz b/frontend-dist/css/609.e5e9e058.css.gz similarity index 72% rename from frontend-dist/css/596.292a1dcd.css.gz rename to frontend-dist/css/609.e5e9e058.css.gz index 86c08bfc362b21821941a1a6c077e3b43a2d1b28..de3b94c6b56148c81aab2734976fa788cd62b9a8 100644 GIT binary patch delta 4289 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 delta 4265 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 L5Y(xg7nK13qX%X6 diff --git a/frontend-dist/css/757.86e23e04.css b/frontend-dist/css/757.86e23e04.css new file mode 100644 index 0000000..7c25b30 --- /dev/null +++ b/frontend-dist/css/757.86e23e04.css @@ -0,0 +1 @@ +.sidebar-container[data-v-418ec867]{display:flex;flex-direction:column;position:fixed;top:50%;left:8px;transform:translateY(-50%);z-index:2001;max-width:200px;background:var(--glass-bg);backdrop-filter:blur(12px) saturate(1.4);-webkit-backdrop-filter:blur(12px) saturate(1.4);border:1px solid var(--glass-border);border-radius:16px;box-shadow:none;transition:width .3s ease,box-shadow .3s ease;overflow:hidden}.sidebar-container.is-collapsed[data-v-418ec867]{width:56px}html.dark .sidebar-container[data-v-418ec867]{background:var(--glass-bg);box-shadow:none}.sidebar-container[data-v-418ec867]:hover,html.dark .sidebar-container[data-v-418ec867]:hover{box-shadow:none}.menu-list[data-v-418ec867]{padding:8px}.menu-item[data-v-418ec867]{display:flex;align-items:center;justify-content:flex-start;padding:12px 12px 12px 0;height:42px;box-sizing:border-box;border-radius:10px;cursor:pointer;transition:background .2s ease,color .2s ease;color:var(--admin-container-color,#333);gap:0;overflow:hidden}.menu-item[data-v-418ec867]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent)}html.dark .menu-item[data-v-418ec867]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent)}.menu-item.is-active[data-v-418ec867]{background:color-mix(in srgb,var(--primary-color) 20%,transparent);color:var(--primary-color)}html.dark .menu-item.is-active[data-v-418ec867]{background:color-mix(in srgb,var(--primary-color) 30%,transparent);color:var(--el-text-color-primary)}.menu-icon[data-v-418ec867]{width:40px;min-width:40px;font-size:16px;flex-shrink:0;text-align:center}.menu-text[data-v-418ec867]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;opacity:1;transition:opacity .2s ease .05s,max-width .25s ease}.sidebar-container.is-collapsed .menu-text[data-v-418ec867]{opacity:0;max-width:0;transition:opacity .1s ease,max-width .2s ease}.toggle-button[data-v-418ec867]{padding:12px;text-align:center;cursor:pointer;transition:all .2s ease;color:var(--admin-container-color,#333)}.toggle-button[data-v-418ec867],html.dark .toggle-button[data-v-418ec867]{border-top:1px solid color-mix(in srgb,var(--el-text-color-primary) 8%,transparent)}.toggle-button[data-v-418ec867]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent)}html.dark .toggle-button[data-v-418ec867]:hover{background:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent)}@media (max-width:768px){.sidebar-container[data-v-418ec867]{left:4px;max-width:170px}.sidebar-container.is-collapsed[data-v-418ec867]{width:50px}.menu-icon[data-v-418ec867]{width:34px;min-width:34px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.date-range-calendar[data-v-5fbe496c]{--calendar-day-size:38px;width:min(336px,100%);max-width:100%;min-width:0;box-sizing:border-box;color:var(--admin-container-color);-webkit-user-select:none;-moz-user-select:none;user-select:none}.selected-range[data-v-5fbe496c]{margin-bottom:16px}.selected-range-inputs[data-v-5fbe496c]{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px}.date-input[data-v-5fbe496c]{width:100%;min-width:0;height:34px;box-sizing:border-box;border:1px solid var(--glass-border);border-radius:8px;padding:0 8px;background:var(--glass-bg);color:var(--admin-container-color);font-size:13px;text-align:center;outline:none;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.date-input[data-v-5fbe496c]:focus,.date-input[data-v-5fbe496c]:hover{border-color:var(--el-color-primary);box-shadow:none}.date-range-separator[data-v-5fbe496c]{color:var(--el-text-color-secondary);font-size:12px;font-weight:700}.calendar-header[data-v-5fbe496c]{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;gap:8px;margin-bottom:14px}.calendar-title[data-v-5fbe496c]{text-align:center;font-size:16px;font-weight:700}.calendar-nav[data-v-5fbe496c]{width:36px;height:36px;border:1px solid var(--glass-border);border-radius:50%;background:var(--glass-bg);color:var(--admin-container-color);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .2s ease,border-color .2s ease,background-color .2s ease,box-shadow .2s ease}.calendar-nav[data-v-5fbe496c]:focus,.calendar-nav[data-v-5fbe496c]:hover{color:var(--el-color-primary);border-color:var(--el-color-primary);background:color-mix(in srgb,var(--primary-color) 8%,transparent);box-shadow:none}.calendar-grid[data-v-5fbe496c],.calendar-weekdays[data-v-5fbe496c]{display:grid;grid-template-columns:repeat(7,1fr)}.calendar-weekdays[data-v-5fbe496c]{margin-bottom:8px;color:var(--el-text-color-secondary);font-size:12px;font-weight:600;text-align:center}.calendar-weekdays span[data-v-5fbe496c]{height:24px;line-height:24px}.calendar-grid[data-v-5fbe496c]{gap:4px}.calendar-day[data-v-5fbe496c]{position:relative;width:var(--calendar-day-size);height:var(--calendar-day-size);box-sizing:border-box;justify-self:center;padding:0;border:1px solid transparent;border-radius:50%;background:transparent;color:var(--admin-container-color);font-size:14px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .18s ease,background-color .18s ease,border-color .18s ease,box-shadow .18s ease}.calendar-day[data-v-5fbe496c]:focus,.calendar-day[data-v-5fbe496c]:hover{border-color:color-mix(in srgb,var(--primary-color) 45%,transparent);background:color-mix(in srgb,var(--primary-color) 10%,transparent);color:var(--el-color-primary)}.calendar-day.is-muted[data-v-5fbe496c]{color:var(--el-text-color-placeholder);opacity:.62}.calendar-day.is-today[data-v-5fbe496c]{border-color:rgba(249,115,22,.7)}.calendar-day.is-in-range[data-v-5fbe496c]{border-radius:12px;background:color-mix(in srgb,var(--primary-color) 12%,transparent);color:var(--el-color-primary)}.calendar-day.is-range-end[data-v-5fbe496c],.calendar-day.is-range-start[data-v-5fbe496c]{background:var(--el-color-primary);border-color:var(--el-color-primary);color:#fff;box-shadow:none}html.dark .calendar-day.is-muted[data-v-5fbe496c]{color:var(--el-text-color-placeholder)}@media (max-width:768px){.date-range-calendar[data-v-5fbe496c]{--calendar-day-size:clamp(30px,8.5vw,38px)}}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.status-panel[data-v-776bcef4]{padding:20px;background:transparent;min-height:100vh}.status-hero[data-v-776bcef4]{--hero-status-color:var(--el-color-success);position:relative;isolation:isolate;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:42px;margin-bottom:8px;padding:28px 12px 34px;color:var(--admin-container-color)}.status-hero[data-v-776bcef4]:after,.status-hero[data-v-776bcef4]:before{content:"";position:absolute;pointer-events:none;z-index:-1}.status-hero[data-v-776bcef4]:before{inset:0;opacity:.34;background-image:radial-gradient(circle at 64% 52%,color-mix(in srgb,var(--primary-color) 9%,transparent),transparent 28%),linear-gradient(color-mix(in srgb,var(--primary-color) 16%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--primary-color) 16%,transparent) 1px,transparent 1px);background-size:auto,34px 34px,34px 34px;mask-image:linear-gradient(90deg,transparent 28%,#000 72%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent 28%,#000 72%,transparent)}.status-hero[data-v-776bcef4]:after{width:150px;height:150px;top:50%;right:31%;border-radius:50%;background:color-mix(in srgb,var(--primary-color) 10%,transparent);filter:blur(20px);transform:translateY(-50%)}.status-hero.is-checking[data-v-776bcef4]{--hero-status-color:var(--el-color-warning)}.status-hero.is-attention[data-v-776bcef4]{--hero-status-color:var(--el-color-danger)}.status-hero-copy[data-v-776bcef4]{position:relative;z-index:1;min-width:0}.status-hero-kicker[data-v-776bcef4]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;margin-bottom:15px}.system-health-badge[data-v-776bcef4]{display:inline-flex;align-items:center;gap:8px;padding:6px 11px;color:var(--hero-status-color);background:color-mix(in srgb,var(--hero-status-color) 10%,var(--glass-bg));border:1px solid color-mix(in srgb,var(--hero-status-color) 24%,var(--glass-border));border-radius:999px;font-size:12px;font-weight:650;line-height:1}.system-health-dot[data-v-776bcef4]{position:relative;width:7px;height:7px;flex-shrink:0;background:currentColor;border-radius:50%;box-shadow:0 0 0 4px color-mix(in srgb,currentColor 12%,transparent)}.system-health-dot[data-v-776bcef4]:after{content:"";position:absolute;inset:-4px;border:1px solid currentColor;border-radius:inherit;animation:healthPulse-776bcef4 2s ease-out infinite}.status-hero-date[data-v-776bcef4]{color:var(--el-text-color-secondary);font-size:12px;font-weight:550;line-height:1.45}.status-hero-title[data-v-776bcef4]{margin:0;color:var(--admin-container-color);font-size:clamp(28px,3vw,40px);font-weight:750;line-height:1.18;letter-spacing:-.035em}.status-hero-summary[data-v-776bcef4]{max-width:720px;margin:12px auto 0;color:var(--el-text-color-secondary);font-size:14px;line-height:1.7;text-align:center}.status-hero-time-card[data-v-776bcef4]{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:center;width:250px;min-width:250px;padding:12px 0 12px 32px;border-left:1px solid color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);box-sizing:border-box}.status-hero-time-caption[data-v-776bcef4]{color:var(--el-text-color-secondary);font-size:10px;font-weight:650;letter-spacing:.12em;text-transform:uppercase}.status-hero-time[data-v-776bcef4]{margin-top:7px;color:var(--admin-container-color);font-size:clamp(28px,3vw,36px);font-weight:750;font-variant-numeric:tabular-nums;line-height:1;letter-spacing:-.04em;white-space:nowrap}.status-hero-timezone[data-v-776bcef4]{margin-top:10px;overflow:hidden;color:var(--el-text-color-secondary);font-size:10px;line-height:1.4;opacity:.78;text-overflow:ellipsis;white-space:nowrap}@keyframes healthPulse-776bcef4{0%{opacity:.8;transform:scale(.75)}75%,to{opacity:0;transform:scale(1.8)}}@media (prefers-reduced-motion:reduce){.system-health-dot[data-v-776bcef4]:after{animation:none}}.overview-cards[data-v-776bcef4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;margin-bottom:30px}.overview-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;display:flex;align-items:center;box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);cursor:pointer;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;will-change:transform}.overview-card[data-v-776bcef4]:focus-within,.overview-card[data-v-776bcef4]:hover{transform:translateY(-5px);box-shadow:0 12px 28px color-mix(in srgb,var(--el-text-color-primary) 16%,transparent);border-color:color-mix(in srgb,var(--primary-color) 35%,var(--glass-border))}@media (prefers-reduced-motion:reduce){.overview-card[data-v-776bcef4]{transition:box-shadow .25s ease,border-color .25s ease}.overview-card[data-v-776bcef4]:focus-within,.overview-card[data-v-776bcef4]:hover{transform:none}}.card-icon[data-v-776bcef4]{width:60px;height:60px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;margin-right:20px;background:var(--primary-color);color:var(--el-color-white)}.card-content[data-v-776bcef4]{flex:1}.card-title[data-v-776bcef4]{font-size:14px;color:#666;margin-bottom:8px;font-weight:500}.card-value[data-v-776bcef4]{font-size:28px;font-weight:700;color:var(--admin-container-color);line-height:1}.card-subtitle[data-v-776bcef4]{font-size:11px;color:var(--el-text-color-secondary);margin-top:4px;opacity:.8}.charts-section[data-v-776bcef4]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-bottom:30px;overflow:visible}@media (max-width:768px){.charts-section[data-v-776bcef4]{grid-template-columns:1fr}}.chart-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;border:1px solid var(--glass-border)}.chart-card[data-v-776bcef4],.chart-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.chart-card[data-v-776bcef4],.chart-content[data-v-776bcef4],.pie-chart-container[data-v-776bcef4],.pie-chart-wrapper[data-v-776bcef4]{overflow:visible}.chart-header[data-v-776bcef4]{display:flex;gap:8px;align-items:center;margin-bottom:20px;font-size:16px;font-weight:600;color:var(--admin-container-color)}.trend-chart-card[data-v-776bcef4]{grid-column:1/-1}.trend-chart-header[data-v-776bcef4]{justify-content:space-between;gap:14px;flex-wrap:wrap}.chart-title[data-v-776bcef4]{display:flex;align-items:center;gap:8px}.trend-controls[data-v-776bcef4]{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}.trend-calendar-btn[data-v-776bcef4]{width:32px;min-width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:var(--admin-container-color);background:var(--glass-bg);border:1px solid var(--glass-border)}.trend-calendar-btn[data-v-776bcef4]:hover{color:var(--el-color-primary);border-color:var(--glass-border);background:var(--glass-bg);box-shadow:none}.trend-date-dialog[data-v-776bcef4]{overflow:visible;max-width:calc(100vw - 32px);box-sizing:border-box}.trend-date-dialog[data-v-776bcef4] .el-dialog__body{overflow:visible;padding:16px 24px 24px}.trend-date-panel[data-v-776bcef4]{width:100%;max-width:100%;min-width:0;box-sizing:border-box;display:flex;justify-content:center;overflow:hidden}.trend-group-switch[data-v-776bcef4]{flex-shrink:0;height:32px;display:flex}.trend-group-switch[data-v-776bcef4] .el-radio-button__inner{height:32px;display:inline-flex;align-items:center;justify-content:center;line-height:1;padding:0 14px}.chart-content.trend-chart-content[data-v-776bcef4]{min-height:320px;padding:0;margin:0;min-width:0;max-width:100%;overflow:hidden}.line-chart-wrapper[data-v-776bcef4]{position:relative;width:100%;max-width:100%;min-width:0;height:320px;overflow:hidden}.line-chart-wrapper[data-v-776bcef4] canvas{display:block;width:100%!important;max-width:100%!important}.trend-empty-state[data-v-776bcef4]{height:320px}.chart-content[data-v-776bcef4]{min-height:160px;padding:15px;margin:-5px}.empty-state[data-v-776bcef4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:160px;color:var(--el-text-color-secondary);font-size:14px}.empty-state .fa-icon[data-v-776bcef4]{font-size:32px;margin-bottom:10px}.stats-list[data-v-776bcef4]{display:flex;flex-direction:column;gap:16px}.stats-item[data-v-776bcef4]{display:flex;align-items:center;gap:12px}.stats-label[data-v-776bcef4]{min-width:80px;font-size:13px;color:#666;font-weight:500}.stats-bar[data-v-776bcef4]{flex:1;height:8px;background:#f0f0f0;border-radius:4px;overflow:hidden}.stats-fill[data-v-776bcef4]{height:100%;background:var(--primary-color);border-radius:4px;transition:width .6s ease}.type-fill[data-v-776bcef4]{background:#16a34a}.stats-value[data-v-776bcef4]{min-width:50px;text-align:right;font-size:13px;font-weight:600;color:var(--admin-container-color)}.pie-chart-container[data-v-776bcef4]{display:flex;align-items:center;gap:24px;flex-wrap:wrap;justify-content:center}.pie-chart-wrapper[data-v-776bcef4]{position:relative;width:180px;height:180px;flex-shrink:0;padding:15px;box-sizing:content-box;overflow:visible;isolation:isolate}.chart-center-text[data-v-776bcef4]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:-1}.center-value[data-v-776bcef4]{font-size:22px;font-weight:700;color:var(--admin-container-color);line-height:1.2}.center-label[data-v-776bcef4]{font-size:11px;color:#888;margin-top:2px}.chart-legend[data-v-776bcef4]{display:flex;flex-direction:column;gap:10px;flex:1;min-width:180px}.legend-item[data-v-776bcef4]{display:flex;align-items:center;gap:10px;padding:8px 12px;background:color-mix(in srgb,var(--el-text-color-primary) 3%,transparent);border:1px solid var(--glass-border);border-radius:8px;transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease;will-change:transform}.legend-item[data-v-776bcef4]:hover{transform:translateY(-2px);background:color-mix(in srgb,var(--primary-color) 8%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 30%,var(--glass-border));box-shadow:0 6px 16px color-mix(in srgb,var(--el-text-color-primary) 12%,transparent)}html.dark .legend-item[data-v-776bcef4]{background:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)}html.dark .legend-item[data-v-776bcef4]:hover{background:color-mix(in srgb,var(--primary-color) 12%,var(--glass-bg))}@media (prefers-reduced-motion:reduce){.legend-item[data-v-776bcef4]{transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease}.legend-item[data-v-776bcef4]:hover{transform:none}}.legend-color[data-v-776bcef4]{width:12px;height:12px;border-radius:3px;flex-shrink:0}.legend-label[data-v-776bcef4]{flex:1;font-size:13px;color:var(--admin-container-color);font-weight:500}.legend-value[data-v-776bcef4]{font-size:13px;font-weight:600;color:var(--admin-container-color);min-width:50px;text-align:right}.legend-percent[data-v-776bcef4]{font-size:12px;color:#888;min-width:40px;text-align:right}.actions-section[data-v-776bcef4]{margin-bottom:30px}.action-card[data-v-776bcef4]{background:var(--glass-bg);border-radius:16px;padding:24px;border:1px solid var(--glass-border)}.action-card[data-v-776bcef4],.action-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.action-card[data-v-776bcef4],.chart-card[data-v-776bcef4],.overview-card[data-v-776bcef4]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.action-header[data-v-776bcef4]{display:flex;align-items:center;gap:8px;margin-bottom:3px;font-size:16px;font-weight:600;color:var(--admin-container-color)}.action-content[data-v-776bcef4]{display:flex;justify-content:center;padding:20px 0}.action-buttons[data-v-776bcef4]{display:flex;gap:20px;flex-wrap:wrap;justify-content:center;align-items:center;width:100%}.action-btn[data-v-776bcef4]{border-radius:10px;padding:12px 24px;margin-left:0;font-weight:500;font-size:14px;transition:background-color .2s ease,border-color .2s ease,color .2s ease;min-width:150px;width:150px;height:48px;box-shadow:none}@media (max-width:768px){.action-btn[data-v-776bcef4]{flex:1;width:auto;min-width:0;height:auto}}.action-btn .fa-icon[data-v-776bcef4]{margin-right:8px;font-size:14px}.rebuild-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#2563eb}.rebuild-btn[data-v-776bcef4]:hover{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.backup-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#16a34a}.backup-btn[data-v-776bcef4]:hover{background:#f0fdf4;border-color:#86efac;color:#15803d}.restore-btn[data-v-776bcef4]{background:var(--el-fill-color-blank);border-color:var(--el-border-color-lighter);color:#d97706}.restore-btn[data-v-776bcef4]:hover{background:#fffbeb;border-color:#fcd34d;color:#b45309}.dark .rebuild-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#60a5fa}.dark .rebuild-btn[data-v-776bcef4]:hover{background:rgba(59,130,246,.12);border-color:rgba(96,165,250,.4);color:#93c5fd}.dark .backup-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#4ade80}.dark .backup-btn[data-v-776bcef4]:hover{background:rgba(34,197,94,.12);border-color:rgba(74,222,128,.4);color:#86efac}.dark .restore-btn[data-v-776bcef4]{background:var(--el-fill-color-light);border-color:var(--el-border-color-lighter);color:#fbbf24}.dark .restore-btn[data-v-776bcef4]:hover{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.4);color:#fcd34d}.restore-section[data-v-776bcef4]{display:inline-block}@media (max-width:768px){.action-buttons>.el-tooltip[data-v-776bcef4],.action-buttons>.restore-section[data-v-776bcef4],.restore-section[data-v-776bcef4]{flex:1;width:100%}.action-btn[data-v-776bcef4]{width:100%!important;padding:10px 20px!important;box-sizing:border-box}}.file-info-section[data-v-776bcef4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;align-items:stretch}.file-info-card[data-v-776bcef4]{position:relative;background:var(--glass-bg);border-radius:16px;box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);transition:all .3s ease;height:300px;overflow:hidden;cursor:pointer}.card-bg-media[data-v-776bcef4]{position:absolute;top:0;left:0;transition:transform .5s ease;display:block}.card-bg-media[data-v-776bcef4],.card-bg-media[data-v-776bcef4] .el-image__inner{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.card-bg-media[data-v-776bcef4] .el-image__wrapper{width:100%;height:100%}.card-bg-fallback[data-v-776bcef4]{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-dashborad-stats-bg-color);display:flex;align-items:center;justify-content:center}.fallback-icon[data-v-776bcef4]{font-size:80px;color:var(--el-text-color-placeholder);opacity:.3}.file-card-header[data-v-776bcef4]{position:absolute;top:0;left:0;right:0;display:flex;gap:8px;align-items:center;padding:12px 16px;font-size:14px;font-weight:600;color:#fff;background:linear-gradient(180deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.2) 55%,transparent);z-index:2}.file-card-header .fa-icon[data-v-776bcef4]{color:#60a5fa}.file-card-header.warning .fa-icon[data-v-776bcef4]{color:#f59e0b}.info-card-footer[data-v-776bcef4]{position:absolute;bottom:0;left:0;right:0;padding:12px 16px;background:linear-gradient(0deg,rgba(0,0,0,.55) 0,rgba(0,0,0,.25) 50%,transparent);text-align:center;z-index:2}.info-card-footer .file-name[data-v-776bcef4]{font-size:14px;color:#fff;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.5)}.info-card-footer .file-meta[data-v-776bcef4]{font-size:12px;color:#fafafa;text-shadow:0 1px 2px rgba(0,0,0,.5)}@media (min-width:1200px){.file-info-card[data-v-776bcef4]{height:400px}}@media (min-width:1600px){.file-info-card[data-v-776bcef4]{height:450px}}.file-info-card[data-v-776bcef4]:hover{box-shadow:var(--glass-shadow)}.file-info-card:hover .card-bg-media[data-v-776bcef4]{transform:scale(1)}@media (max-width:768px){.status-panel[data-v-776bcef4]{padding:15px}.status-hero[data-v-776bcef4]{grid-template-columns:1fr;gap:18px;padding:24px 8px 30px}.status-hero-time-card[data-v-776bcef4]{width:100%;min-width:0;padding:18px 0 0;border-top:1px solid color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);border-left:0}.status-hero-time[data-v-776bcef4]{font-size:32px}.charts-section[data-v-776bcef4],.overview-cards[data-v-776bcef4]{grid-template-columns:1fr;gap:15px}.trend-chart-header[data-v-776bcef4]{align-items:stretch}.chart-title[data-v-776bcef4]{width:100%}.trend-controls[data-v-776bcef4]{width:100%;justify-content:stretch}.trend-date-dialog[data-v-776bcef4] .el-dialog__body{padding:12px 14px 18px}.trend-group-switch[data-v-776bcef4]{width:100%}.trend-group-switch[data-v-776bcef4] .el-radio-button{flex:1}.trend-group-switch[data-v-776bcef4] .el-radio-button__inner{width:100%;padding:0 10px}.line-chart-wrapper[data-v-776bcef4],.trend-empty-state[data-v-776bcef4]{height:280px}.file-info-section[data-v-776bcef4]{grid-template-columns:1fr;gap:15px}.card-icon[data-v-776bcef4]{width:50px;height:50px;font-size:20px;margin-right:15px}.card-value[data-v-776bcef4]{font-size:24px}.action-buttons[data-v-776bcef4]{flex-direction:column;gap:12px}.action-btn[data-v-776bcef4]{width:100%;min-width:unset}}@media (max-width:480px){.status-hero[data-v-776bcef4]{padding:21px 4px 28px}.status-hero-title[data-v-776bcef4]{font-size:27px}}.stats-fill[data-v-776bcef4]{animation:fillAnimation-776bcef4 1s ease-out}@keyframes fillAnimation-776bcef4{0%{width:0}}.progress-container[data-v-776bcef4]{width:100%;padding:20px;text-align:center}.progress-header[data-v-776bcef4]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.progress-phase[data-v-776bcef4]{font-size:16px;font-weight:600;color:var(--admin-container-color)}.progress-percentage[data-v-776bcef4]{font-size:18px;font-weight:700;color:var(--primary-color-accent)}.progress-bar[data-v-776bcef4]{margin-bottom:16px}.progress-bar[data-v-776bcef4] .el-progress-bar__outer{background-color:rgba(139,92,246,.1);border-radius:6px}.progress-bar[data-v-776bcef4] .el-progress-bar__inner{background:var(--primary-color);border-radius:6px;transition:width .3s ease}.progress-details[data-v-776bcef4]{display:flex;justify-content:center;gap:24px;margin-bottom:12px;flex-wrap:wrap}.progress-count[data-v-776bcef4],.progress-time[data-v-776bcef4]{display:flex;align-items:center;gap:6px;font-size:14px;color:#666}.progress-count .fa-icon[data-v-776bcef4],.progress-time .fa-icon[data-v-776bcef4]{color:var(--primary-color-accent);font-size:12px}.progress-message[data-v-776bcef4]{font-size:13px;color:#888;margin-bottom:16px;min-height:20px}.cancel-btn[data-v-776bcef4]{margin-top:12px;border-radius:10px;padding:10px 24px;font-weight:600;transition:all .3s cubic-bezier(.4,0,.2,1);background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.3);color:#ef4444}.cancel-btn[data-v-776bcef4]:hover{background:rgba(239,68,68,.2);border-color:rgba(239,68,68,.5);box-shadow:none}.cancel-btn .fa-icon[data-v-776bcef4]{margin-right:8px}.error-container[data-v-776bcef4]{width:100%;padding:20px;display:flex;flex-direction:column;align-items:center;gap:16px;background:rgba(239,68,68,.05);border-radius:12px;border:1px solid rgba(239,68,68,.2)}.error-icon[data-v-776bcef4]{width:48px;height:48px;border-radius:50%;background:rgba(239,68,68,.1);display:flex;align-items:center;justify-content:center;color:#ef4444;font-size:24px}.error-content[data-v-776bcef4]{text-align:center}.error-message[data-v-776bcef4]{font-size:15px;font-weight:600;color:#ef4444;margin-bottom:8px}.error-suggestion[data-v-776bcef4]{font-size:13px;color:#666}.error-actions[data-v-776bcef4]{display:flex;gap:12px}.error-actions .el-button[data-v-776bcef4]{border-radius:10px;padding:10px 24px;font-weight:600;transition:all .3s cubic-bezier(.4,0,.2,1);min-width:100px}.error-actions .el-button--primary[data-v-776bcef4]{background:var(--primary-color);border:none;color:#fff}.error-actions .el-button--primary[data-v-776bcef4]:hover{background:var(--el-color-primary-dark-2);box-shadow:none}.error-actions .el-button--default[data-v-776bcef4]{background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);color:var(--el-text-color-regular)}.error-actions .el-button--default[data-v-776bcef4]:hover{background:hsla(0,0%,100%,.15);border-color:var(--glass-border-hover);box-shadow:none}.error-actions .fa-icon[data-v-776bcef4]{margin-right:8px}html.dark .progress-count[data-v-776bcef4],html.dark .progress-time[data-v-776bcef4]{color:#aaa}html.dark .progress-message[data-v-776bcef4]{color:#999}html.dark .error-container[data-v-776bcef4]{background:rgba(239,68,68,.1);border-color:rgba(239,68,68,.3)}html.dark .error-suggestion[data-v-776bcef4]{color:#aaa}@media (max-width:768px){.error-container[data-v-776bcef4],.progress-container[data-v-776bcef4]{padding:16px}.progress-header[data-v-776bcef4]{flex-direction:column;gap:8px;text-align:center}.progress-details[data-v-776bcef4]{flex-direction:column;gap:8px}.error-actions[data-v-776bcef4]{flex-direction:column;width:100%}.error-actions .el-button[data-v-776bcef4]{width:100%;margin:0}}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon,.el-input-number{display:inline-flex}.el-input-number{line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.custom-select[data-v-b9420432]{position:relative}.custom-select-trigger[data-v-b9420432]{display:flex;align-items:center;justify-content:space-between;height:32px;padding:0 12px;background:color-mix(in srgb,var(--el-fill-color-blank) 72%,transparent);border:1px solid var(--glass-border);border-radius:8px;cursor:pointer;transition:background-color .2s ease,border-color .2s ease;box-sizing:border-box}html.dark .custom-select-trigger[data-v-b9420432]{background:color-mix(in srgb,var(--el-bg-color) 75%,transparent)}.custom-select-trigger[data-v-b9420432]:hover{background:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .custom-select-trigger[data-v-b9420432]:hover{background:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.custom-select.is-open .custom-select-trigger[data-v-b9420432]{border-color:var(--el-color-primary)}.custom-select-value[data-v-b9420432]{font-size:14px;color:var(--el-text-color-regular);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-select-arrow[data-v-b9420432],.custom-select-value.is-placeholder[data-v-b9420432]{color:var(--el-text-color-placeholder)}.custom-select-arrow[data-v-b9420432]{font-size:12px;transition:transform .2s ease;flex-shrink:0;margin-left:8px}.custom-select.is-open .custom-select-arrow[data-v-b9420432]{transform:rotate(180deg)}.custom-select-dropdown[data-v-b9420432]{position:absolute;top:calc(100% + 4px);left:0;width:100%;box-sizing:border-box;padding:4px;background:var(--popper-bg-color);border:1px solid var(--glass-border);border-radius:8px;box-shadow:var(--popper-shadow);z-index:2000;max-height:280px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.custom-select-option[data-v-b9420432]{display:flex;align-items:center;gap:8px;min-height:34px;padding:0 12px;border-radius:6px;background:transparent;font-size:14px;color:var(--el-text-color-regular);cursor:pointer;transition:background-color .2s ease,color .2s ease}.custom-select-option.is-selected[data-v-b9420432]{color:var(--primary-color-accent);font-weight:600}.custom-select-option[data-v-b9420432]:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);color:var(--el-text-color-primary)}html.dark .custom-select-option[data-v-b9420432]:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent);color:var(--el-text-color-primary)}.option-icon[data-v-b9420432]{width:16px;height:16px;flex-shrink:0}.dropdown-fade-enter-active[data-v-b9420432],.dropdown-fade-leave-active[data-v-b9420432]{transition:opacity .2s ease,transform .2s ease}.dropdown-fade-enter-from[data-v-b9420432],.dropdown-fade-leave-to[data-v-b9420432]{opacity:0;transform:translateY(-8px)}.upload-settings[data-v-0082a519]{padding:20px;min-height:500px;overflow-x:hidden}.page-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:12px}.first-title[data-v-0082a519]{display:flex;align-items:center;gap:8px;margin:0;font-size:20px;font-weight:600}.help-icon[data-v-0082a519]{cursor:pointer;color:var(--el-text-color-secondary);font-size:14px}.inline-warning-icon[data-v-0082a519]{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-warning-icon[data-v-0082a519]:hover{color:var(--el-color-primary)}.inline-help-icon[data-v-0082a519]{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-help-icon[data-v-0082a519]:hover{color:var(--el-color-primary)}.add-btn[data-v-0082a519]{border-radius:8px;transition:background-color .2s ease,border-color .2s ease}.header-actions[data-v-0082a519]{display:flex;gap:12px}.header-actions[data-v-0082a519] .el-button{border-radius:8px}.channel-group[data-v-0082a519]{margin-bottom:32px;background:var(--glass-bg);border-radius:16px;border:1px solid var(--glass-border);overflow:hidden;box-shadow:var(--glass-shadow)}.group-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background:var(--glass-header-bg);border-bottom:1px solid var(--glass-header-border)}.group-title[data-v-0082a519]{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:600;color:var(--el-text-color-primary)}.group-icon[data-v-0082a519]{font-size:20px;color:var(--el-color-primary)}.channel-count[data-v-0082a519]{font-size:12px}.load-balance-switch[data-v-0082a519]{display:flex;align-items:center;gap:8px}.switch-label[data-v-0082a519]{font-size:13px;color:var(--el-text-color-secondary)}.channel-cards[data-v-0082a519]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;padding:20px}.channel-card[data-v-0082a519]{background:var(--glass-bg);border-radius:10px;border:1px solid var(--glass-border);overflow:hidden;position:relative;display:flex;flex-direction:column;box-shadow:var(--glass-shadow)}.channel-card[data-v-0082a519],.channel-group[data-v-0082a519]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.card-glow[data-v-0082a519]{position:absolute;width:150px;height:150px;border-radius:50%;pointer-events:none;opacity:0;transform:translate(-50%,-50%);transition:opacity .3s ease;z-index:0;background:radial-gradient(circle,rgba(56,189,248,.15) 0,transparent 70%)}.channel-card.telegram .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(84,169,235,.2) 0,transparent 70%)}.channel-card.cfr2 .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(246,130,31,.2) 0,transparent 70%)}.channel-card.s3 .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(86,154,49,.2) 0,transparent 70%)}.channel-card.discord .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(88,101,242,.2) 0,transparent 70%)}.channel-card.huggingface .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(255,210,30,.2) 0,transparent 70%)}.channel-card.webdav .card-glow[data-v-0082a519]{background:radial-gradient(circle,rgba(20,184,166,.2) 0,transparent 70%)}.channel-card[data-v-0082a519]:hover{border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.channel-card.disabled[data-v-0082a519]{opacity:.6;background:var(--el-fill-color-lighter)}.card-header[data-v-0082a519]{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:var(--glass-header-bg);border-bottom:1px solid var(--glass-header-border)}.card-title[data-v-0082a519]{display:flex;align-items:center;gap:8px}.channel-name[data-v-0082a519]{font-weight:600;font-size:14px;color:var(--el-text-color-primary)}.card-body[data-v-0082a519]{padding:14px 16px;min-height:60px;text-align:left}.card-info[data-v-0082a519]{display:flex;flex-direction:column;gap:8px;align-items:flex-start;width:100%;overflow:hidden}.info-item[data-v-0082a519]{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--el-text-color-secondary);min-width:0;width:100%;max-width:100%}.info-text[data-v-0082a519]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;text-align:left}.info-icon[data-v-0082a519]{width:14px;flex-shrink:0;color:var(--el-text-color-placeholder)}.quota-mini[data-v-0082a519]{margin-top:12px;padding-top:12px;border-top:1px dashed var(--el-border-color-lighter)}.quota-mini[data-v-0082a519] .el-progress{margin-bottom:4px}.quota-text[data-v-0082a519]{font-size:11px;color:var(--el-text-color-secondary)}.card-actions[data-v-0082a519]{display:flex;justify-content:flex-end;gap:4px;padding:10px 16px;border-top:1px solid var(--glass-header-border);background:var(--glass-header-bg);margin-top:auto}.empty-tip[data-v-0082a519]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;color:var(--el-text-color-placeholder);gap:12px}.empty-icon[data-v-0082a519]{font-size:32px}.channel-warning[data-v-0082a519]{margin:0 20px 16px;padding:10px 14px;font-size:13px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);border-radius:6px;border-left:3px solid var(--el-color-warning)}.channel-type-option[data-v-0082a519]{display:inline-flex;align-items:center;gap:8px;line-height:1}.select-option-icon[data-v-0082a519]{width:16px;height:16px;font-size:16px;text-align:center}.form-warning[data-v-0082a519]{padding:10px 14px;font-size:13px;color:var(--el-color-warning);background:var(--el-color-warning-light-9);border-radius:6px;border-left:3px solid var(--el-color-warning);margin-top:8px}.quota-status[data-v-0082a519]{width:100%}.quota-status[data-v-0082a519] .el-progress{margin-bottom:8px}.quota-info[data-v-0082a519]{font-size:13px;color:var(--el-text-color-secondary);padding:8px 12px;background:var(--el-fill-color);border:1px solid var(--glass-border);border-radius:6px}.quota-info.quota-warning[data-v-0082a519]{color:var(--el-color-danger);background:var(--el-color-danger-light-9);font-weight:500}.quota-label[data-v-0082a519]{display:inline-flex;align-items:center;gap:4px}.refresh-btn[data-v-0082a519]{padding:0!important;margin:0!important;height:auto!important;min-height:auto!important;vertical-align:middle}.refresh-btn .fa-spin[data-v-0082a519]{animation:fa-spin-0082a519 1s linear infinite}@keyframes fa-spin-0082a519{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:768px){.upload-settings[data-v-0082a519]{padding:12px}.page-header[data-v-0082a519]{flex-direction:column;align-items:flex-start}.channel-cards[data-v-0082a519]{grid-template-columns:1fr;padding:12px}.group-header[data-v-0082a519]{flex-direction:column;gap:12px;align-items:flex-start}}[data-v-0082a519] .channel-dialog{width:600px!important;max-width:90vw!important}@media (max-width:768px){[data-v-0082a519] .channel-dialog{width:90vw!important}}.el-checkbox-group{font-size:0;line-height:0}.floating-save-btn[data-v-9cef95d2]{position:fixed;right:var(--floating-btn-right,24px);bottom:var(--floating-btn-bottom,24px);display:flex;align-items:center;gap:6px;padding:10px 18px;background:var(--primary-color);color:var(--floating-btn-color);border-radius:50px;cursor:pointer;box-shadow:var(--floating-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1);z-index:100;font-weight:500;font-size:13px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.floating-save-btn[data-v-9cef95d2]:hover{box-shadow:var(--floating-btn-shadow-hover)}.floating-save-btn[data-v-9cef95d2]:active{transform:translateY(-1px);box-shadow:var(--floating-btn-shadow)}.floating-save-btn.is-loading[data-v-9cef95d2]{cursor:not-allowed;opacity:.8}.floating-save-btn.is-loading[data-v-9cef95d2]:hover{transform:none}.floating-save-btn svg[data-v-9cef95d2]{font-size:14px}.fade-up-enter-active[data-v-9cef95d2]{transition:all .3s ease-out}.fade-up-leave-active[data-v-9cef95d2]{transition:all .2s ease-in}.fade-up-enter-from[data-v-9cef95d2]{opacity:0;transform:translateY(20px)}.fade-up-leave-to[data-v-9cef95d2]{opacity:0;transform:translateY(10px)}@media (max-width:768px){.floating-save-btn[data-v-9cef95d2]{right:16px;bottom:16px;padding:10px 16px;font-size:12px}.floating-save-btn svg[data-v-9cef95d2]{font-size:12px}}@media (max-width:480px){.floating-save-btn[data-v-9cef95d2]{right:12px;bottom:12px;padding:12px;border-radius:50%}.save-text[data-v-9cef95d2]{display:none}.floating-save-btn svg[data-v-9cef95d2]{font-size:16px}}.security-settings[data-v-264510a6]{padding:20px;min-height:500px}.first-settings[data-v-264510a6]{margin-bottom:40px}.first-title[data-v-264510a6]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-264510a6]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-264510a6] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);margin-bottom:20px;box-shadow:var(--glass-shadow)}.first-settings[data-v-264510a6] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-264510a6] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-264510a6] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-264510a6] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-264510a6] .el-input,.first-settings[data-v-264510a6] .el-select{width:100%}.first-settings[data-v-264510a6] .el-switch{--el-switch-on-color:var(--el-color-primary)}.form-item-hint[data-v-264510a6]{display:inline-block;margin-left:8px;font-size:14px;color:var(--el-text-color-regular);line-height:32px;vertical-align:middle}.query-param-list[data-v-264510a6]{display:flex;flex-direction:column;gap:10px;width:100%}.query-param-row[data-v-264510a6]{display:grid;grid-template-columns:minmax(120px,1fr) minmax(160px,1.4fr) auto;gap:8px;align-items:center;width:100%}.response-field-row[data-v-264510a6]{display:grid;grid-template-columns:minmax(180px,1fr) auto auto auto;gap:4px;align-items:center;width:100%}.response-field-row[data-v-264510a6] .el-button+.el-button{margin-left:0}.token-title[data-v-264510a6]{display:flex;align-items:center;justify-content:space-between}.token-actions[data-v-264510a6]{margin-left:5px}.token-table-container[data-v-264510a6]{display:flex;justify-content:center;margin-top:20px;width:100%;overflow:hidden}.token-table[data-v-264510a6]{width:100%;border-radius:12px!important;overflow:hidden;box-shadow:var(--glass-shadow);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border)}.token-table[data-v-264510a6] .el-table__header-wrapper{border-radius:12px 12px 0 0}.token-table[data-v-264510a6] .el-table__body-wrapper{border-radius:0 0 12px 12px;background:transparent}.token-table[data-v-264510a6] .el-table{border-radius:12px;background:transparent}.token-table[data-v-264510a6] .el-table__header{background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)}.token-table[data-v-264510a6] .el-table th{background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)!important;border-bottom:1px solid var(--glass-border);text-align:center}.token-table[data-v-264510a6] .el-table td{background-color:transparent!important;border-bottom:1px solid var(--glass-border)}html.dark .token-table[data-v-264510a6] .el-table th{background-color:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)!important}html.dark .token-table[data-v-264510a6] .el-table td{border-bottom:1px solid var(--glass-border)}.token-table[data-v-264510a6] .el-table__row:hover td{background-color:color-mix(in srgb,var(--el-text-color-primary) 3%,transparent)!important}html.dark .token-table[data-v-264510a6] .el-table__row:hover td{background-color:color-mix(in srgb,var(--el-text-color-primary) 5%,transparent)!important}.token-table[data-v-264510a6] .el-table__row:last-child td{border-bottom:none}.table-cell-content[data-v-264510a6]{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:4px;padding:8px 4px;min-height:40px;text-align:center}.action-buttons[data-v-264510a6]{gap:8px}.action-button[data-v-264510a6]{margin-left:0}.permission-tag[data-v-264510a6]{margin:2px!important}.token-display[data-v-264510a6]{font-family:Courier New,monospace;background-color:var(--text-bg-color);padding:4px 8px;border-radius:6px;font-size:12px;word-break:break-all;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis}@media (max-width:768px){.security-settings[data-v-264510a6]{padding:15px;padding-bottom:80px}.first-settings[data-v-264510a6] .el-form{padding:12px 15px}.first-settings[data-v-264510a6] .el-form-item__content{max-width:100%}.query-param-row[data-v-264510a6]{grid-template-columns:1fr}.response-field-row[data-v-264510a6]{grid-template-columns:1fr auto auto auto}.token-table-container[data-v-264510a6]{padding:0 10px}.table-cell-content[data-v-264510a6]{padding:6px 2px;min-height:36px}.token-display[data-v-264510a6]{font-size:11px;padding:3px 6px}}@media (max-width:480px){.token-table-container[data-v-264510a6]{padding:0 5px}.table-cell-content[data-v-264510a6]{padding:4px 2px;min-height:32px;font-size:12px}.action-buttons .el-button[data-v-264510a6]{padding:4px 8px;font-size:12px}.permission-tag[data-v-264510a6]{font-size:11px;padding:0 4px;height:20px;line-height:20px}}.token-result[data-v-264510a6]{padding:10px 0}.token-result .el-form-item[data-v-264510a6]{margin-bottom:20px}.dialog-footer[data-v-264510a6]{display:flex;justify-content:flex-end;gap:10px}.fade-slide-enter-active[data-v-264510a6],.fade-slide-leave-active[data-v-264510a6]{transition:all .3s ease-in-out}.fade-slide-enter-from[data-v-264510a6],.fade-slide-leave-to[data-v-264510a6]{opacity:0;transform:translateY(-10px)}.fade-slide-enter-to[data-v-264510a6],.fade-slide-leave-from[data-v-264510a6]{opacity:1;transform:translateY(0)}[data-v-264510a6] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);border:1px solid var(--glass-border);box-shadow:var(--dialog-box-shadow)}.page-settings[data-v-342e4dda]{padding:20px;min-height:500px}.first-settings[data-v-342e4dda]{margin-bottom:40px}.first-title[data-v-342e4dda]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-342e4dda]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-342e4dda] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.first-settings[data-v-342e4dda] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-342e4dda] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-342e4dda] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-342e4dda] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-342e4dda] .el-form-item:has(.el-textarea) .el-form-item__content{max-width:600px}.first-settings[data-v-342e4dda] .el-input,.first-settings[data-v-342e4dda] .el-select{width:100%}.first-settings[data-v-342e4dda] .el-switch{--el-switch-on-color:var(--el-color-primary)}.announcement-manual-height[data-v-342e4dda] .el-textarea__inner{height:var(--announcement-manual-height)!important}.announcement-refresh-option[data-v-342e4dda]{width:100%;margin-top:10px;display:flex;justify-content:flex-start}.first-settings[data-v-342e4dda] .el-form-item:has(.announcement-refresh-option) .el-form-item__content{flex-direction:column;align-items:flex-start}@media (max-width:768px){.page-settings[data-v-342e4dda]{padding:15px;padding-bottom:80px}.first-settings[data-v-342e4dda] .el-form{padding:12px 15px}.first-settings[data-v-342e4dda] .el-form-item__content{max-width:100%}}.others-settings[data-v-69ae97d8]{padding:20px;min-height:500px}.first-settings[data-v-69ae97d8]{margin-bottom:40px}.first-title[data-v-69ae97d8]{display:flex;align-items:center;gap:8px;margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--el-color-primary-light-7)}.second-title[data-v-69ae97d8]{display:flex;align-items:center;gap:8px;text-align:start;margin-left:0;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--el-border-color-lighter)}.first-settings[data-v-69ae97d8] .el-form{padding:20px 24px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-radius:16px;border:1px solid var(--glass-border);margin-bottom:20px;box-shadow:var(--glass-shadow)}.first-settings[data-v-69ae97d8] .el-form-item{margin-bottom:20px;display:flex;flex-direction:column;align-items:flex-start}.first-settings[data-v-69ae97d8] .el-form-item:last-child{margin-bottom:0}.first-settings[data-v-69ae97d8] .el-form-item__label{text-align:left;padding-bottom:8px;font-weight:500;color:var(--el-text-color-primary);width:auto!important;display:flex;align-items:center;gap:5px}.first-settings[data-v-69ae97d8] .el-form-item__content{width:100%;max-width:400px;margin-left:0!important}.first-settings[data-v-69ae97d8] .el-input{width:100%}.first-settings[data-v-69ae97d8] .el-switch{--el-switch-on-color:var(--el-color-primary)}@media (max-width:768px){.others-settings[data-v-69ae97d8]{padding:15px;padding-bottom:80px}.first-settings[data-v-69ae97d8] .el-form{padding:12px 15px}.first-settings[data-v-69ae97d8] .el-form-item__content{max-width:100%}}.admin-header-content[data-v-7e9e1ae0]{display:flex;justify-content:space-between;align-items:center;min-height:45px;padding:10px 24px;position:fixed;top:8px;left:50%;width:calc(95% - 16px);z-index:2001;border:1px solid var(--glass-border);border-radius:16px;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease}.admin-header-content[data-v-7e9e1ae0],.admin-header-content[data-v-7e9e1ae0]:hover{background:var(--glass-bg);box-shadow:none;transform:translateX(-50%)}.header-action[data-v-7e9e1ae0],.header-content .actions[data-v-7e9e1ae0]{display:flex;align-items:center}.header-action[data-v-7e9e1ae0]{gap:10px}.header-content .actions[data-v-7e9e1ae0]{gap:15px}.header-content .actions i[data-v-7e9e1ae0],.header-icon[data-v-7e9e1ae0]{font-size:1.5em;cursor:pointer;transition:color .3s ease,transform .3s ease;color:var(--admin-container-color);outline:none}.header-content .actions .el-dropdown-link i[data-v-7e9e1ae0]:hover,.header-content .actions i[data-v-7e9e1ae0]:hover,.header-icon[data-v-7e9e1ae0]:hover{color:var(--primary-color-accent);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-7e9e1ae0]{color:var(--admin-container-color)}.header-content .actions .disabled[data-v-7e9e1ae0]{color:var(--el-text-color-disabled);pointer-events:none}.header-content .actions .enabled[data-v-7e9e1ae0]{color:var(--primary-color-accent)}@media (max-width:768px){.admin-header-content[data-v-7e9e1ae0]{flex-direction:column;top:6px;width:calc(100% - 32px);padding:6px 12px;gap:4px;border-radius:14px}.header-content .actions i[data-v-7e9e1ae0],.header-icon[data-v-7e9e1ae0]{font-size:.95em}.header-content .actions[data-v-7e9e1ae0]{gap:10px;margin-top:10px}}.pagination-container[data-v-7e9e1ae0]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-7e9e1ae0]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-7e9e1ae0] .el-pagination{--el-pagination-button-bg-color:var(--glass-bg);--el-pagination-hover-color:var(--primary-color-accent)}.pagination-container[data-v-7e9e1ae0] .btn-next,.pagination-container[data-v-7e9e1ae0] .btn-prev,.pagination-container[data-v-7e9e1ae0] .el-pager li{min-width:36px;height:36px;margin:0 4px;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--el-text-color-secondary);box-shadow:none;font-weight:500;line-height:36px;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container[data-v-7e9e1ae0] .btn-next:hover,.pagination-container[data-v-7e9e1ae0] .btn-prev:hover,.pagination-container[data-v-7e9e1ae0] .el-pager li:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)}.pagination-container[data-v-7e9e1ae0] .el-pager li.is-active,.pagination-container[data-v-7e9e1ae0] .el-pager li.is-active:hover{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none!important}.pagination-right[data-v-7e9e1ae0]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-jump[data-v-7e9e1ae0],.page-total[data-v-7e9e1ae0]{color:var(--el-text-color-secondary);font-size:13px;white-space:nowrap}.page-jump[data-v-7e9e1ae0]{display:flex;align-items:center;gap:6px}.page-jump .jump-input[data-v-7e9e1ae0]{width:50px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__wrapper{height:28px;padding:0 8px;border:1px solid var(--glass-border);border-radius:8px;background-color:var(--glass-bg)!important;box-shadow:none;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__inner{height:28px;color:var(--el-text-color-primary);line-height:28px;text-align:center}.pagination-container .refresh-btn[data-v-7e9e1ae0]{width:36px;min-width:36px;height:36px;padding:0!important;border:1px solid var(--glass-border)!important;border-radius:10px!important;background:var(--glass-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none;font-size:14px;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .refresh-btn[data-v-7e9e1ae0]:hover{border-color:var(--glass-border-hover)!important;background:var(--glass-header-bg)!important;color:var(--primary-color-accent)!important;box-shadow:none}.page-jump .jump-btn[data-v-7e9e1ae0],.pagination-container .load-more[data-v-7e9e1ae0]{border-color:var(--primary-color)!important;background:var(--primary-color)!important;color:var(--el-color-white)!important;box-shadow:none;font-weight:500;transition:background-color .25s ease,border-color .25s ease,color .25s ease}.pagination-container .load-more[data-v-7e9e1ae0]{height:36px;padding:0 16px!important;border-radius:10px!important}.page-jump .jump-btn[data-v-7e9e1ae0]{height:28px;padding:0 12px!important;border-radius:8px!important;font-size:12px;font-weight:600}.page-jump .jump-btn[data-v-7e9e1ae0]:hover,.pagination-container .load-more[data-v-7e9e1ae0]:hover{border-color:var(--el-color-primary-dark-2)!important;background:var(--el-color-primary-dark-2)!important;box-shadow:none!important}@media (max-width:768px){.pagination-container[data-v-7e9e1ae0]{flex-direction:column;gap:8px;margin-top:14px;padding-bottom:10px}.pagination-center[data-v-7e9e1ae0]{flex-wrap:wrap;justify-content:center;gap:6px;order:0}.pagination-container[data-v-7e9e1ae0] .el-pager li{min-width:30px;height:30px;margin:0 2px;border-radius:8px!important;font-size:12px;line-height:30px}.pagination-container[data-v-7e9e1ae0] .btn-next,.pagination-container[data-v-7e9e1ae0] .btn-prev{display:none!important;position:static!important;min-width:30px!important;width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px}.pagination-right[data-v-7e9e1ae0]{position:static;width:100%;justify-content:center;gap:6px;order:1}.page-jump[data-v-7e9e1ae0],.page-total[data-v-7e9e1ae0]{font-size:12px}.page-jump .jump-input[data-v-7e9e1ae0]{width:40px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__wrapper{height:26px;padding:0 6px;border-radius:7px}.page-jump .jump-input[data-v-7e9e1ae0] .el-input__inner{height:26px;font-size:12px;line-height:26px}.pagination-container .refresh-btn[data-v-7e9e1ae0]{width:30px!important;min-width:30px!important;height:30px!important;border-radius:8px!important;font-size:12px!important}.pagination-container .load-more[data-v-7e9e1ae0]{height:30px!important;min-height:30px!important;padding:0 10px!important;border-radius:8px!important;font-size:12px!important}.page-jump .jump-btn[data-v-7e9e1ae0]{height:26px;padding:0 10px!important;border-radius:7px!important;font-size:11px}}.container[data-v-7e9e1ae0]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0;overflow-x:hidden}.main-container[data-v-7e9e1ae0]{margin-top:60px;transition:margin-left .3s ease,width .3s ease;width:calc(100% - 280px);margin-left:170px}.main-container.collapsed[data-v-7e9e1ae0]{width:calc(100% - 150px);margin-left:80px}@media (max-width:768px){.main-container.collapsed[data-v-7e9e1ae0],.main-container[data-v-7e9e1ae0]{width:auto;margin-left:65px;margin-right:15px;padding:0;min-height:calc(100vh - 60px);box-sizing:border-box}} \ No newline at end of file diff --git a/frontend-dist/css/757.86e23e04.css.gz b/frontend-dist/css/757.86e23e04.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..d44b034ca38ecc2ccb93d997125fb65d207d150f GIT binary patch literal 12812 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 diff --git a/frontend-dist/css/app.228eda22.css b/frontend-dist/css/app.228eda22.css new file mode 100644 index 0000000..c1ad772 --- /dev/null +++ b/frontend-dist/css/app.228eda22.css @@ -0,0 +1 @@ +@font-face{font-family:Pacifico;src:url(/fonts/Pacifico-Regular.dc63ac94.woff2) format("woff2");font-display:swap}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--el-text-color-primary)}body{margin:0;padding:0;background-color:var(--bg-color)}:focus-visible{outline:none}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}:root{--bg-color:#f5f5f7;--primary-color:#2563eb;--primary-color-accent:#1d4ed8;--popper-bg-color:#fff;--popper-shadow:none;--image-preview-filter:none;--text-bg-color:#f2f3f5;--background-image-filter:none;--upload-list-file-icon-color:#2563eb;--el-upload-dragger-bg-color:#fafafb;--el-upload-dragger-border:2px dashed #c9cdd4;--el-upload-dragger-hover-box-shadow:0 8px 24px rgba(31,35,41,.12);--el-upload-dragger-uniform-color:#2563eb;--upload-card-effect-color:color-mix(in srgb,var(--primary-color) 66%,#fff);--upload-card-effect-highlight-color:color-mix(in srgb,var(--primary-color) 56%,#fff);--upload-card-hover-glow-bg:radial-gradient(circle,color-mix(in srgb,var(--primary-color) 20%,transparent) 0%,transparent 70%);--el-icon--upload-color:#2563eb;--upload-text-color:#4e5969;--upload-header-color:#1d2129;--upload-main-title-color:#1d2129;--upload-title-text-color:#4e5969;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#2563eb;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#1d2129;--upload-title-crayon-edge:#c9cdd4;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--modern-action-group-bg:#f7f8fa;--modern-action-group-border:#e5e6eb;--logo-glow-color:transparent;--modern-action-group-hover-bg:#f2f3f5;--upload-action-btn-bg:transparent;--upload-action-btn-color:#4e5969;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#f2f3f5;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color);--upload-action-retry-color:#16a34a;--upload-action-danger-color:#dc2626;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:#fef2f2;--upload-action-danger-hover-shadow:none;--file-name-bg:#f7f8fa;--file-name-border:#e5e6eb;--file-name-hover-bg:#f2f3f5;--file-name-hover-border:#c9cdd4;--upload-list-item-border-color:#e5e6eb;--upload-list-item-hover-border:#c9cdd4;--dashboard-title-bg:transparent;--toolbar-button-bg-color:#fff;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#4e5969;--page-footer-text-color:#59636e;--page-footer-name-color:#1d2129;--password-input-bg-color:#fff;--login-title-color:#1d2129;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color);--login-input-label-focus-color:var(--primary-color);--dialog-bg-color:#fff;--dialog-surface-bg-color:hsla(0,0%,100%,.88);--dialog-backdrop-blur:12px;--dialog-box-shadow:none;--dialog-section-bg-color:#f2f3f5;--dialog-control-bg-color:#f7f8fa;--mobile-action-sheet-bg:hsla(0,0%,100%,.95);--mobile-action-sheet-border:rgba(0,0,0,.05);--mobile-action-sheet-item-bg:rgba(0,0,0,.04);--mobile-action-sheet-item-active-bg:rgba(0,0,0,.08);--tabs-dropdown-popper-bg-color:#fff;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);--tabs-switcher-border-color:#e5e6eb;--tabs-switcher-accent-color:var(--primary-color);--tabs-switcher-current-color:var(--primary-color);--tabs-switcher-current-bg:var(--el-color-primary-light-9);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#f5f5f7;--admin-container-color:#1d2129;--admin-dashborad-stats-bg-color:#fff;--admin-dashboard-btn-color:#4e5969;--admin-dashboard-btn-bg-color:#fff;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#fff;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#fff;--admin-dashboard-tag-suggestion-border-color:#e5e6eb;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#f7f8fa;--skeleton-bg-color:#e5e6eb;--skeleton-shimmer-color:#f7f8fa;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 10%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--theme-toggle-color:#1d2129;--theme-toggle-bg-color:#1d2129;--admin-theme-toggle-color:#1d2129;--admin-theme-toggle-bg-color:#1d2129;--not-found-title-text-color:#1d2129;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--floating-btn-right:32px;--floating-btn-bottom:32px;--glass-bg:hsla(0,0%,100%,.45);--glass-border:#c9cdd4;--glass-border-hover:#aeb4be;--glass-shadow:none;--glass-backdrop-blur:20px;--glass-header-bg:rgba(247,248,250,.45);--glass-header-border:#c9cdd4;--el-text-color-primary:#1d2129;--el-text-color-regular:#4e5969;--el-text-color-secondary:#59636e;--el-text-color-placeholder:#86909c;--el-text-color-disabled:#c0c4cc;--el-color-primary:var(--primary-color);--el-color-primary-rgb:37,99,235;--el-color-primary-light-3:#60a5fa;--el-color-primary-light-5:#93c5fd;--el-color-primary-light-7:#bfdbfe;--el-color-primary-light-8:#dbeafe;--el-color-primary-light-9:#eff6ff;--el-color-primary-dark-2:var(--primary-color-accent);--el-border-color:#c9cdd4;--el-border-color-light:#d9dce2;--el-border-color-lighter:#e5e6eb;--el-border-color-extra-light:#eceef1;--el-border-radius-base:8px;--el-border-radius-small:6px;--el-fill-color:#f2f3f5;--el-fill-color-light:#f7f8fa;--el-fill-color-lighter:#fafafb;--el-fill-color-blank:#fff;--el-bg-color-page:#f5f5f7;--text-color:#1d2129;--text-color-secondary:#59636e;--login-input-icon-color:#86909c;--icon-color:#59636e;--placeholder-color:#86909c}.dark{--bg-color:#0f0f0f;--primary-color:#4a5d9b;--primary-color-accent:#6f82c2;--popper-bg-color:#161618;--popper-shadow:none;--image-preview-filter:brightness(0.7);--text-bg-color:#1f1f22;--background-image-filter:brightness(0.7);--upload-list-file-icon-color:#60a5fa;--el-upload-dragger-bg-color:#131316;--el-upload-dragger-border:2px dashed #3a3a3f;--el-upload-dragger-hover-box-shadow:0 8px 24px hsla(0,0%,100%,.07);--el-upload-dragger-uniform-color:#60a5fa;--upload-card-effect-color:#c7dbf7;--upload-card-effect-highlight-color:#eaf2ff;--upload-card-hover-glow-bg:radial-gradient(circle,rgba(147,197,253,.16) 0%,rgba(147,197,253,.1) 24%,rgba(96,165,250,.055) 44%,transparent 72%);--el-icon--upload-color:#60a5fa;--upload-text-color:#a1a1aa;--upload-header-color:#fafafa;--upload-main-title-color:#fafafa;--upload-title-text-color:#a1a1aa;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#60a5fa;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#fafafa;--upload-title-crayon-edge:#3a3a3f;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--toolbar-button-bg-color:#161618;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#a1a1aa;--modern-action-group-bg:#131316;--modern-action-group-border:#2a2a2e;--logo-glow-color:transparent;--modern-action-group-hover-bg:#1f1f22;--upload-action-btn-bg:transparent;--upload-action-btn-color:#a1a1aa;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#1f1f22;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color-accent);--upload-action-retry-color:#4ade80;--upload-action-danger-color:#f87171;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:hsla(0,91%,71%,.12);--upload-action-danger-hover-shadow:none;--file-name-bg:#1f1f22;--file-name-border:#2a2a2e;--file-name-hover-bg:#26262a;--file-name-hover-border:#3a3a3f;--upload-list-item-border-color:#2a2a2e;--upload-list-item-hover-border:#3a3a3f;--dashboard-title-bg:transparent;--page-footer-text-color:#71717a;--page-footer-name-color:#a1a1aa;--password-input-bg-color:#131316;--login-title-color:#fafafa;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color-accent);--login-input-label-focus-color:var(--primary-color-accent);--dialog-bg-color:#161618;--dialog-surface-bg-color:rgba(30,30,30,.5);--dialog-backdrop-blur:20px;--dialog-box-shadow:none;--dialog-section-bg-color:#1f1f22;--dialog-control-bg-color:#161618;--mobile-action-sheet-bg:rgba(40,44,52,.95);--mobile-action-sheet-border:hsla(0,0%,100%,.1);--mobile-action-sheet-item-bg:hsla(0,0%,100%,.08);--mobile-action-sheet-item-active-bg:hsla(0,0%,100%,.15);--tabs-dropdown-popper-bg-color:#161618;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:color-mix(in srgb,var(--el-text-color-primary) 14%,transparent);--tabs-switcher-border-color:#2a2a2e;--tabs-switcher-accent-color:var(--primary-color-accent);--tabs-switcher-current-color:var(--primary-color-accent);--tabs-switcher-current-bg:color-mix(in srgb,var(--primary-color) 22%,transparent);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#0f0f0f;--admin-container-color:#fafafa;--admin-dashborad-stats-bg-color:#161618;--admin-dashboard-btn-color:#a1a1aa;--admin-dashboard-btn-bg-color:#161618;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#161618;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#161618;--admin-dashboard-tag-suggestion-border-color:#2a2a2e;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#1f1f22;--skeleton-bg-color:#1f1f22;--skeleton-shimmer-color:#26262a;--theme-toggle-color:#d4d4d8;--theme-toggle-bg-color:#e4e4e7;--admin-theme-toggle-color:#d4d4d8;--admin-theme-toggle-bg-color:#e4e4e7;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 18%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--not-found-title-text-color:#fafafa;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--glass-bg:rgba(30,30,30,.5);--glass-border:#34343a;--glass-border-hover:#4a4a52;--glass-shadow:none;--glass-header-bg:rgba(31,31,34,.5);--glass-header-border:#34343a;--text-color:#fafafa;--text-color-secondary:#a1a1aa;--login-input-icon-color:#71717a;--icon-color:#a1a1aa;--placeholder-color:#6b6b73}html.dark{--el-color-primary:var(--primary-color);--el-color-primary-rgb:74,93,155;--el-color-primary-light-3:#53649c;--el-color-primary-light-5:#3f4a72;--el-color-primary-light-7:#303852;--el-color-primary-light-8:#252b3d;--el-color-primary-light-9:#1c2030;--el-color-primary-dark-2:var(--primary-color-accent);--el-text-color-primary:#fafafa;--el-text-color-regular:#d4d4d8;--el-text-color-secondary:#a1a1aa;--el-text-color-placeholder:#71717a;--el-text-color-disabled:#52525b;--el-border-color:#3a3a3f;--el-border-color-light:#34343a;--el-border-color-lighter:#2a2a2e;--el-border-color-extra-light:#242428;--el-fill-color:#26262a;--el-fill-color-light:#1f1f22;--el-fill-color-lighter:#18181b;--el-fill-color-blank:#161618;--el-bg-color-page:#0f0f0f;--el-bg-color:#161618;--el-bg-color-overlay:#1f1f22}.el-message{border-radius:10px!important;border:1px solid var(--glass-border)!important;padding:10px 20px!important;box-shadow:var(--glass-shadow)!important;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);min-width:unset!important;top:30px!important}.el-message .el-message__icon{font-size:18px!important;color:var(--el-text-color-primary)!important}.el-message .el-message__content{font-size:16px!important;font-weight:500!important;color:var(--el-text-color-primary)!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.5px}.el-message--success .el-message__icon{color:#67c23a!important}.el-message--warning .el-message__icon{color:#e6a23c!important}.el-message--error .el-message__icon{color:#f56c6c!important}@media (max-width:768px){.el-message{padding:8px 18px!important;border-radius:10px!important}.el-message .el-message__icon{font-size:14px!important}.el-message .el-message__content{font-size:13px!important}}.el-dialog,.el-message-box{border-radius:12px!important;overflow:hidden;box-shadow:var(--glass-shadow)!important;border:1px solid var(--glass-border);background-color:var(--dialog-surface-bg-color)!important;backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2);-webkit-backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2)}.el-dialog__header,.el-message-box__header{border-bottom:none;padding:16px 20px!important;margin-right:0!important;position:relative}.el-dialog__header:after,.el-message-box__header:after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px;background:var(--el-border-color-lighter)}.el-dialog__body,.el-message-box__content{padding:20px!important}.el-dialog__footer,.el-message-box__btns{border-top:none;padding:12px 20px!important;background-color:transparent}.dark .el-dialog__header:after,.dark .el-message-box__header:after{background:var(--el-border-color-lighter)}html.dark .el-button--primary.is-plain{--el-button-text-color:var(--el-text-color-primary);--el-button-bg-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent);--el-button-border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);color:var(--el-text-color-primary)!important;background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent)!important}html.dark .el-button--primary.is-plain:focus,html.dark .el-button--primary.is-plain:hover{color:var(--el-color-white)!important;background-color:var(--el-color-primary)!important;border-color:var(--el-color-primary-light-3)!important}.dark .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.dark .el-pager li{color:var(--el-text-color-secondary)}.dark .el-pagination .btn-next,.dark .el-pagination .btn-prev,.dark .el-pagination button{background-color:transparent;color:var(--el-text-color-secondary)}.dark .el-input__wrapper.is-focus,.dark .el-select__wrapper.is-focused,.dark .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-primary-light-5) inset!important}.el-select__popper.el-popper{border-radius:8px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow)}.el-select__popper .el-select-dropdown__list{box-sizing:border-box;padding:4px}.el-select__popper .el-select-dropdown__item{min-height:34px;padding:0 12px;border-radius:6px;background:transparent;color:var(--el-text-color-regular);transition:background-color .2s ease,color .2s ease}.el-select__popper .el-select-dropdown__item.is-selected{background-color:transparent;color:var(--primary-color-accent)}.el-select__popper .el-select-dropdown__item.is-hovering,.el-select__popper .el-select-dropdown__item:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);color:var(--el-text-color-primary)}html.dark .el-cascader__dropdown__item.is-active,html.dark .el-select__popper .el-select-dropdown__item.is-selected{background-color:transparent!important;color:var(--primary-color-accent)!important}html.dark .el-cascader__dropdown__item.hover,html.dark .el-select__popper .el-select-dropdown__item.is-hovering,html.dark .el-select__popper .el-select-dropdown__item:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent)!important;color:var(--el-text-color-primary)!important}.dark .el-tabs__item.is-active{color:var(--el-text-color-primary)}html.dark .el-tabs__item:not(.is-disabled):hover{color:var(--primary-color-accent)}html.dark .el-switch__label.is-active{color:var(--el-text-color-primary)}html.dark .el-switch__label:not(.is-active){color:var(--el-text-color-secondary)}.el-checkbox__inner{box-sizing:border-box;width:var(--el-checkbox-input-width,14px);height:var(--el-checkbox-input-height,var(--el-checkbox-input-width,14px));aspect-ratio:1/1;border-radius:50%!important}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:calc(50% - .5px)!important;transform:translateY(-50%) scale(.5)}.dark .el-checkbox__input.is-checked+.el-checkbox__label,.dark .el-radio__input.is-checked+.el-radio__label{color:var(--el-text-color-primary)!important}.el-loading-mask{border-radius:12px}.el-dropdown__popper.el-popper{border-radius:8px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow)}html.dark .el-dropdown__popper.el-popper{border-color:var(--glass-border)}.el-dropdown__popper.el-popper .el-dropdown-menu{padding:4px;border-radius:7px;background:transparent;border:none}.el-dropdown__popper.el-popper .el-dropdown-menu__item{min-height:34px;padding:0 12px;border-radius:6px;border:none;background:transparent;color:var(--el-text-color-regular);transition:background-color .2s ease,color .2s ease}.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 10%,transparent);color:var(--el-text-color-primary)}html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent);color:var(--el-text-color-primary)}.el-popper.is-light>.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important}.el-card,.el-dropdown__popper.el-popper{background-color:var(--glass-bg)!important;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4)} \ No newline at end of file diff --git a/frontend-dist/css/app.228eda22.css.gz b/frontend-dist/css/app.228eda22.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..dc01973ac010c052bdc7e5af95b7b8d371e9e512 GIT binary patch literal 3913 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 X+b>$8MHe;;#C-fOtq&TiK287tZQhf4 literal 0 HcmV?d00001 diff --git a/frontend-dist/css/app.bf217ecd.css b/frontend-dist/css/app.bf217ecd.css deleted file mode 100644 index ec56261..0000000 --- a/frontend-dist/css/app.bf217ecd.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Pacifico;src:url(/fonts/Pacifico-Regular.dc63ac94.woff2) format("woff2");font-display:swap}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--el-text-color-primary)}body{margin:0;padding:0;background-color:var(--bg-color)}:focus-visible{outline:none}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}:root{--bg-color:#f5f5f7;--primary-color:#2563eb;--primary-color-accent:#1d4ed8;--popper-bg-color:#fff;--popper-shadow:none;--image-preview-filter:none;--text-bg-color:#f2f3f5;--background-image-filter:none;--upload-list-file-icon-color:#2563eb;--el-upload-dragger-bg-color:#fafafb;--el-upload-dragger-border:2px dashed #c9cdd4;--el-upload-dragger-hover-box-shadow:none;--el-upload-dragger-uniform-color:#2563eb;--upload-card-effect-color:color-mix(in srgb,var(--primary-color) 66%,#fff);--upload-card-effect-highlight-color:color-mix(in srgb,var(--primary-color) 56%,#fff);--upload-card-hover-glow-bg:radial-gradient(circle,color-mix(in srgb,var(--primary-color) 20%,transparent) 0%,transparent 70%);--el-icon--upload-color:#2563eb;--upload-text-color:#4e5969;--upload-header-color:#1d2129;--upload-main-title-color:#1d2129;--upload-title-text-color:#4e5969;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#2563eb;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#1d2129;--upload-title-crayon-edge:#c9cdd4;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--modern-action-group-bg:#f7f8fa;--modern-action-group-border:#e5e6eb;--logo-glow-color:transparent;--modern-action-group-hover-bg:#f2f3f5;--upload-action-btn-bg:transparent;--upload-action-btn-color:#4e5969;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#f2f3f5;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color);--upload-action-retry-color:#16a34a;--upload-action-danger-color:#dc2626;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:#fef2f2;--upload-action-danger-hover-shadow:none;--file-name-bg:#f7f8fa;--file-name-border:#e5e6eb;--file-name-hover-bg:#f2f3f5;--file-name-hover-border:#c9cdd4;--upload-list-item-border-color:#e5e6eb;--upload-list-item-hover-border:#c9cdd4;--dashboard-title-bg:transparent;--toolbar-button-bg-color:#fff;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#4e5969;--page-footer-text-color:#59636e;--page-footer-name-color:#1d2129;--password-input-bg-color:#fff;--login-title-color:#1d2129;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color);--login-input-label-focus-color:var(--primary-color);--dialog-bg-color:#fff;--dialog-surface-bg-color:hsla(0,0%,100%,.88);--dialog-backdrop-blur:12px;--dialog-box-shadow:none;--dialog-section-bg-color:#f2f3f5;--dialog-control-bg-color:#f7f8fa;--mobile-action-sheet-bg:hsla(0,0%,100%,.95);--mobile-action-sheet-border:rgba(0,0,0,.05);--mobile-action-sheet-item-bg:rgba(0,0,0,.04);--mobile-action-sheet-item-active-bg:rgba(0,0,0,.08);--tabs-dropdown-popper-bg-color:#fff;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:#f2f3f5;--tabs-switcher-border-color:#e5e6eb;--tabs-switcher-accent-color:var(--primary-color);--tabs-switcher-current-color:var(--primary-color);--tabs-switcher-current-bg:var(--el-color-primary-light-9);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#f5f5f7;--admin-container-color:#1d2129;--admin-dashborad-stats-bg-color:#fff;--admin-dashboard-btn-color:#4e5969;--admin-dashboard-btn-bg-color:#fff;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#fff;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#fff;--admin-dashboard-tag-suggestion-border-color:#e5e6eb;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#f7f8fa;--skeleton-bg-color:#e5e6eb;--skeleton-shimmer-color:#f7f8fa;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 10%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--theme-toggle-color:#1d2129;--theme-toggle-bg-color:#1d2129;--admin-theme-toggle-color:#1d2129;--admin-theme-toggle-bg-color:#1d2129;--not-found-title-text-color:#1d2129;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--floating-btn-right:32px;--floating-btn-bottom:32px;--glass-bg:hsla(0,0%,100%,.45);--glass-border:#d9dce2;--glass-border-hover:#bfc4cc;--glass-shadow:none;--glass-backdrop-blur:20px;--glass-header-bg:rgba(247,248,250,.45);--glass-header-border:#d9dce2;--el-text-color-primary:#1d2129;--el-text-color-regular:#4e5969;--el-text-color-secondary:#59636e;--el-text-color-placeholder:#86909c;--el-text-color-disabled:#c0c4cc;--el-color-primary:var(--primary-color);--el-color-primary-rgb:37,99,235;--el-color-primary-light-3:#60a5fa;--el-color-primary-light-5:#93c5fd;--el-color-primary-light-7:#bfdbfe;--el-color-primary-light-8:#dbeafe;--el-color-primary-light-9:#eff6ff;--el-color-primary-dark-2:var(--primary-color-accent);--el-border-color:#c9cdd4;--el-border-color-light:#d9dce2;--el-border-color-lighter:#e5e6eb;--el-border-color-extra-light:#eceef1;--el-border-radius-base:8px;--el-border-radius-small:6px;--el-fill-color:#f2f3f5;--el-fill-color-light:#f7f8fa;--el-fill-color-lighter:#fafafb;--el-fill-color-blank:#fff;--el-bg-color-page:#f5f5f7;--text-color:#1d2129;--text-color-secondary:#59636e;--login-input-icon-color:#86909c;--icon-color:#59636e;--placeholder-color:#86909c}.dark{--bg-color:#0f0f0f;--primary-color:#4a5d9b;--primary-color-accent:#6f82c2;--popper-bg-color:#161618;--popper-shadow:none;--image-preview-filter:brightness(0.7);--text-bg-color:#1f1f22;--background-image-filter:brightness(0.7);--upload-list-file-icon-color:#60a5fa;--el-upload-dragger-bg-color:#131316;--el-upload-dragger-border:2px dashed #3a3a3f;--el-upload-dragger-hover-box-shadow:none;--el-upload-dragger-uniform-color:#60a5fa;--upload-card-effect-color:#c7dbf7;--upload-card-effect-highlight-color:#eaf2ff;--upload-card-hover-glow-bg:radial-gradient(circle,rgba(147,197,253,.16) 0%,rgba(147,197,253,.1) 24%,rgba(96,165,250,.055) 44%,transparent 72%);--el-icon--upload-color:#60a5fa;--upload-text-color:#a1a1aa;--upload-header-color:#fafafa;--upload-main-title-color:#fafafa;--upload-title-text-color:#a1a1aa;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#60a5fa;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#fafafa;--upload-title-crayon-edge:#3a3a3f;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--toolbar-button-bg-color:#161618;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#a1a1aa;--modern-action-group-bg:#131316;--modern-action-group-border:#2a2a2e;--logo-glow-color:transparent;--modern-action-group-hover-bg:#1f1f22;--upload-action-btn-bg:transparent;--upload-action-btn-color:#a1a1aa;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#1f1f22;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color-accent);--upload-action-retry-color:#4ade80;--upload-action-danger-color:#f87171;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:hsla(0,91%,71%,.12);--upload-action-danger-hover-shadow:none;--file-name-bg:#1f1f22;--file-name-border:#2a2a2e;--file-name-hover-bg:#26262a;--file-name-hover-border:#3a3a3f;--upload-list-item-border-color:#2a2a2e;--upload-list-item-hover-border:#3a3a3f;--dashboard-title-bg:transparent;--page-footer-text-color:#71717a;--page-footer-name-color:#a1a1aa;--password-input-bg-color:#131316;--login-title-color:#fafafa;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color-accent);--login-input-label-focus-color:var(--primary-color-accent);--dialog-bg-color:#161618;--dialog-surface-bg-color:rgba(30,30,30,.5);--dialog-backdrop-blur:20px;--dialog-box-shadow:none;--dialog-section-bg-color:#1f1f22;--dialog-control-bg-color:#161618;--mobile-action-sheet-bg:rgba(40,44,52,.95);--mobile-action-sheet-border:hsla(0,0%,100%,.1);--mobile-action-sheet-item-bg:hsla(0,0%,100%,.08);--mobile-action-sheet-item-active-bg:hsla(0,0%,100%,.15);--tabs-dropdown-popper-bg-color:#161618;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:#1f1f22;--tabs-switcher-border-color:#2a2a2e;--tabs-switcher-accent-color:var(--primary-color-accent);--tabs-switcher-current-color:var(--primary-color-accent);--tabs-switcher-current-bg:color-mix(in srgb,var(--primary-color) 22%,transparent);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#0f0f0f;--admin-container-color:#fafafa;--admin-dashborad-stats-bg-color:#161618;--admin-dashboard-btn-color:#a1a1aa;--admin-dashboard-btn-bg-color:#161618;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#161618;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#161618;--admin-dashboard-tag-suggestion-border-color:#2a2a2e;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#1f1f22;--skeleton-bg-color:#1f1f22;--skeleton-shimmer-color:#26262a;--theme-toggle-color:#d4d4d8;--theme-toggle-bg-color:#e4e4e7;--admin-theme-toggle-color:#d4d4d8;--admin-theme-toggle-bg-color:#e4e4e7;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 18%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--not-found-title-text-color:#fafafa;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--glass-bg:rgba(30,30,30,.5);--glass-border:#34343a;--glass-border-hover:#4a4a52;--glass-shadow:none;--glass-header-bg:rgba(31,31,34,.5);--glass-header-border:#34343a;--text-color:#fafafa;--text-color-secondary:#a1a1aa;--login-input-icon-color:#71717a;--icon-color:#a1a1aa;--placeholder-color:#6b6b73}html.dark{--el-color-primary:var(--primary-color);--el-color-primary-rgb:74,93,155;--el-color-primary-light-3:#53649c;--el-color-primary-light-5:#3f4a72;--el-color-primary-light-7:#303852;--el-color-primary-light-8:#252b3d;--el-color-primary-light-9:#1c2030;--el-color-primary-dark-2:var(--primary-color-accent);--el-text-color-primary:#fafafa;--el-text-color-regular:#d4d4d8;--el-text-color-secondary:#a1a1aa;--el-text-color-placeholder:#71717a;--el-text-color-disabled:#52525b;--el-border-color:#3a3a3f;--el-border-color-light:#34343a;--el-border-color-lighter:#2a2a2e;--el-border-color-extra-light:#242428;--el-fill-color:#26262a;--el-fill-color-light:#1f1f22;--el-fill-color-lighter:#18181b;--el-fill-color-blank:#161618;--el-bg-color-page:#0f0f0f;--el-bg-color:#161618;--el-bg-color-overlay:#1f1f22}.el-message{border-radius:10px!important;border:1px solid var(--glass-border)!important;padding:10px 20px!important;box-shadow:var(--glass-shadow)!important;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);min-width:unset!important;top:30px!important}.el-message .el-message__icon{font-size:18px!important;color:var(--el-text-color-primary)!important}.el-message .el-message__content{font-size:16px!important;font-weight:500!important;color:var(--el-text-color-primary)!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.5px}.el-message--success .el-message__icon{color:#67c23a!important}.el-message--warning .el-message__icon{color:#e6a23c!important}.el-message--error .el-message__icon{color:#f56c6c!important}@media (max-width:768px){.el-message{padding:8px 18px!important;border-radius:10px!important}.el-message .el-message__icon{font-size:14px!important}.el-message .el-message__content{font-size:13px!important}}.el-dialog,.el-message-box{border-radius:12px!important;overflow:hidden;box-shadow:var(--glass-shadow)!important;border:1px solid var(--glass-border);background-color:var(--dialog-surface-bg-color)!important;backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2);-webkit-backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2)}.el-dialog__header,.el-message-box__header{border-bottom:none;padding:16px 20px!important;margin-right:0!important;position:relative}.el-dialog__header:after,.el-message-box__header:after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px;background:var(--el-border-color-lighter)}.el-dialog__body,.el-message-box__content{padding:20px!important}.el-dialog__footer,.el-message-box__btns{border-top:none;padding:12px 20px!important;background-color:transparent}.dark .el-dialog__header:after,.dark .el-message-box__header:after{background:var(--el-border-color-lighter)}html.dark .el-button--primary.is-plain{--el-button-text-color:var(--el-text-color-primary);--el-button-bg-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent);--el-button-border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);color:var(--el-text-color-primary)!important;background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent)!important}html.dark .el-button--primary.is-plain:focus,html.dark .el-button--primary.is-plain:hover{color:var(--el-color-white)!important;background-color:var(--el-color-primary)!important;border-color:var(--el-color-primary-light-3)!important}.dark .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.dark .el-pager li{color:var(--el-text-color-secondary)}.dark .el-pagination .btn-next,.dark .el-pagination .btn-prev,.dark .el-pagination button{background-color:transparent;color:var(--el-text-color-secondary)}.dark .el-input__wrapper.is-focus,.dark .el-select__wrapper.is-focused,.dark .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-primary-light-5) inset!important}.el-select__popper.el-popper{border-radius:8px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow)}.el-select__popper .el-select-dropdown__list{box-sizing:border-box;padding:4px}.el-select__popper .el-select-dropdown__item{min-height:34px;padding:0 12px;border-radius:6px;background:transparent;color:var(--el-text-color-regular);transition:background-color .2s ease,color .2s ease}.el-select__popper .el-select-dropdown__item.is-selected{background-color:transparent;color:var(--primary-color-accent)}.el-select__popper .el-select-dropdown__item.is-hovering,.el-select__popper .el-select-dropdown__item:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent);color:var(--el-text-color-primary)}html.dark .el-cascader__dropdown__item.is-active,html.dark .el-select__popper .el-select-dropdown__item.is-selected{background-color:transparent!important;color:var(--primary-color-accent)!important}html.dark .el-cascader__dropdown__item.hover,html.dark .el-select__popper .el-select-dropdown__item.is-hovering,html.dark .el-select__popper .el-select-dropdown__item:hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent)!important;color:var(--el-text-color-primary)!important}.dark .el-tabs__item.is-active{color:var(--el-text-color-primary)}html.dark .el-tabs__item:not(.is-disabled):hover{color:var(--primary-color-accent)}html.dark .el-switch__label.is-active{color:var(--el-text-color-primary)}html.dark .el-switch__label:not(.is-active){color:var(--el-text-color-secondary)}.el-checkbox__inner{box-sizing:border-box;width:var(--el-checkbox-input-width,14px);height:var(--el-checkbox-input-height,var(--el-checkbox-input-width,14px));aspect-ratio:1/1;border-radius:50%!important}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:calc(50% - .5px)!important;transform:translateY(-50%) scale(.5)}.dark .el-checkbox__input.is-checked+.el-checkbox__label,.dark .el-radio__input.is-checked+.el-radio__label{color:var(--el-text-color-primary)!important}.el-loading-mask{border-radius:12px}.el-dropdown__popper.el-popper{border-radius:8px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow)}html.dark .el-dropdown__popper.el-popper{border-color:var(--glass-border)}.el-dropdown__popper.el-popper .el-dropdown-menu{padding:4px;border-radius:7px;background:transparent;border:none}.el-dropdown__popper.el-popper .el-dropdown-menu__item{min-height:34px;padding:0 12px;border-radius:6px;border:none;background:transparent;color:var(--el-text-color-regular);transition:background-color .2s ease,color .2s ease}.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 6%,transparent);color:var(--el-text-color-primary)}html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent);color:var(--el-text-color-primary)}.el-popper.is-light>.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important}.el-card,.el-dropdown__popper.el-popper{background-color:var(--glass-bg)!important;backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--glass-backdrop-blur)) saturate(1.4)} \ No newline at end of file diff --git a/frontend-dist/css/app.bf217ecd.css.gz b/frontend-dist/css/app.bf217ecd.css.gz deleted file mode 100644 index f338e75f6863efc5b674dac6d7c495590501fde9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3879 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 diff --git a/frontend-dist/index.html b/frontend-dist/index.html index b8c1d47..f88f8ae 100644 --- a/frontend-dist/index.html +++ b/frontend-dist/index.html @@ -1 +1 @@ -Sanyue ImgHub

\ No newline at end of file +Sanyue ImgHub
\ No newline at end of file diff --git a/frontend-dist/index.html.gz b/frontend-dist/index.html.gz index 688e55a12624f383558231c9a46475ea7c98a1e4..924f7fffd947aa880bfb0ece19a28e168d6d3d22 100644 GIT binary patch literal 544 zcmV+*0^j`~iwFP!000023YAn%Z`3dl{VRhx^s-5|%OYASj#MEe$_a!J+>m2W5_fG+ zu*X^Q@6l$rrP~St7fa8Y_vYhyT)!}+c^(l4_O7W9CpZ;)DMV8bs7zCPWCeOqF(FHl zxht;3>2_cq3;dDoB*nMl%T4i?{HWNr4h3imjDe-NeJ9cMcuxw-qZE_H{Ya4?#qF)( zK^mN_#$o|08!TJpilmi8dAaiHr}f!C;G8fnK(!8Kpw+!>(OH(7CXAw~oeevP=%lck zf`B1nCqa|;FBfG2}7KxZAoK#6VWVRVW+ivC=2hx4AINzdd~C%x5~ z$_lJk{UfLyWdn&Rs;7>s%mc+|!k?^YYPRgKIV-%bj+gbZMKIW5Jha?l6p*5pqPk0! z9&*?f69z*um3n>kdSkX&-X+o0)sgx)2{n$Txi zQxZp86VDFQfXL!G`;cg}xk95hn?G@?<5IO`=B5tx&;dsZee)GBB0{1VXJ|7+S|;}0 z`hLhQ7{U}T81@u*Fh&|Nx*7JC2g(c|)TBNi2Z7*{wQ#!g_(^7IeY8ap+0b*#2p{)k@~g1MG61ONb%`3hG6 literal 546 zcmV+-0^R)|iwFP!000023YAn%Yuqpp{VP-TkjvWM4I8on%MePT>8T}@_EuzRY%42k zTxsO3|9x3|lV%f2+l%0dd2c?RM&%nrnx_GwQRc(;$fh`&*Bc& za3>9pR%14UmGzdba#_^Mq1>!`_0#sLf5ItZn1QMtN>8gt*{rcFHH{cVRXXeU5YS0s zHF*JDz($H9vSO=?9*tFnqn7f)w`bvM7#wCyNq5YDdXHWD4q~qbhMn;g#@bE2@$$JFLzMFN@`}Tv`N!4TfXO4F&-*Xeo+^ zSm-YKeKw*u6k@K|yQ@pH#rz?Psw@`j-z3y9_ zlj|78Vr%5dVeAlDyk;L0)y?JR8nyWor&yM%CNou~r>71$kZ-H6co7gHg)l*#7~(v! z@3wEdRD&Um{(|8^VGl!~0fU?1V7a5j@KKHGei;P%<35-iJ~>noPZ%r%)9jD+3G=cz kWi5-}g%~@6HS^OyR%`57mBmtRG5-<20I$@V6Eg$=0HC4@%>V!Z diff --git a/frontend-dist/js/22.755ee57d.js b/frontend-dist/js/22.755ee57d.js deleted file mode 100644 index 1655e22..0000000 --- a/frontend-dist/js/22.755ee57d.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[22],{213:function(e,n,t){t(85331),t(19104)},4318:function(){},10456:function(e,n,t){t(85331)},18785:function(e,n,t){t(85331)},19104:function(e,n,t){t(85331)},30694:function(e,n,t){t(85331)},38736:function(e,n,t){t(85331)},54047:function(e,n,t){t.d(n,{A:function(){return u}});var i=t(56768);const o=["title"];function a(e,n,t,a,s,c){const l=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("span",{class:"language-switcher",onClick:n[0]||(n[0]=(...e)=>c.toggleLocale&&c.toggleLocale(...e)),role:"button",title:e.$t("language.switchTo")},[(0,i.bF)(l,{icon:"globe",class:"lang-icon"})],8,o)}var s=t(46638),c={name:"LanguageSwitcher",computed:{isZh(){return"zh-CN"===this.$i18n.locale}},methods:{toggleLocale(){const e=this.isZh?"en":"zh-CN";(0,s.xS)(e)}}},l=t(71241);const r=(0,l.A)(c,[["render",a],["__scopeId","data-v-08567d0a"]]);var u=r},67819:function(e,n,t){t(85331)},70797:function(e,n,t){t.d(n,{A:function(){return s}});t(44114);var i=t(25507),o=t(16915);let a=!1;async function s(e,n={}){n.credentials="include",n.headers={...n.headers};const t=await fetch(e,n);return 401!==t.status||a||(a=!0,i.A.commit("setAdminLoggedIn",!1),o.A.push("/adminLogin").finally(()=>{a=!1})),t}},77128:function(e,n,t){t(85331),t(4318)},78450:function(e,n,t){t(85331)},85970:function(e,n,t){t(85331)},91570:function(e,n,t){t.d(n,{A:function(){return M}});var i=t(54047),o=t(56768),a=t(45130),s=t(24232);const c={id:"themeMaskAdmin"},l=["cx","cy","r"],r=["r"],u=["opacity"];function h(e,n,t,i,h,g){const d=(0,o.g2)("font-awesome-icon");return(0,o.uX)(),(0,o.CE)("div",{id:"themeToggle",onClick:n[0]||(n[0]=(...e)=>g.handleToggleClick&&g.handleToggleClick(...e))},[(0,o.bF)(a.eB,{name:"icon-fade",mode:"out-in"},{default:(0,o.k6)(()=>[h.isAuto?((0,o.uX)(),(0,o.Wv)(d,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.3em",color:"var(--admin-theme-toggle-color)"}})):((0,o.uX)(),(0,o.CE)("svg",{key:"sun-moon",class:(0,s.C4)(["theme_toggle_svg",{dark:h.isDark}]),width:"1.3em",height:"1.3em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,o.Lk)("mask",c,[n[1]||(n[1]=(0,o.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,o.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:h.isDark?"50%":"100%",cy:h.isDark?"23%":"0%",r:h.isDark?"9":"5"},null,8,l)]),(0,o.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:h.isDark?"9":"5",mask:"url(#themeMaskAdmin)"},null,8,r),(0,o.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:h.isDark?0:1},[...n[2]||(n[2]=[(0,o.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,o.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,o.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,o.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,o.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,o.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,o.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,o.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,u)],2))]),_:1})])}var g={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},d=t(71241);const p=(0,d.A)(g,[["render",h],["__scopeId","data-v-5c149ed5"]]);var m=p;const k={class:"tabs"},v=["aria-expanded"],b={class:"page-switcher-title"},f=["onMouseenter","onClick"],P={class:"page-switcher-title"};function C(e,n,t,c,l,r){const u=(0,o.g2)("font-awesome-icon"),h=m,g=i.A;return(0,o.uX)(),(0,o.CE)("div",k,[(0,o.Lk)("div",{class:(0,s.C4)(["page-switcher",{"is-open":l.isPageMenuOpen}]),role:"navigation",onClick:n[3]||(n[3]=(0,a.D$)(()=>{},["stop"])),onPointerdown:n[4]||(n[4]=(0,a.D$)(()=>{},["stop"])),onMouseenter:n[5]||(n[5]=(...e)=>r.handlePageSwitcherEnter&&r.handlePageSwitcherEnter(...e)),onMouseleave:n[6]||(n[6]=(...e)=>r.handlePageSwitcherLeave&&r.handlePageSwitcherLeave(...e))},[(0,o.Lk)("div",{class:"page-switcher-sheet",role:"menu",onClick:n[2]||(n[2]=(0,a.D$)(()=>{},["stop"]))},[(0,o.Lk)("button",{class:"page-option is-current",type:"button",role:"menuitem","aria-current":"page","aria-expanded":l.isPageMenuOpen,onClick:n[0]||(n[0]=(0,a.D$)(e=>r.handlePageOptionClick(r.activePageOption.name),["stop"]))},[(0,o.bF)(u,{icon:r.activePageOption.icon,class:"page-option-icon"},null,8,["icon"]),(0,o.Lk)("span",b,(0,s.v_)(e.$t(r.activePageOption.label)),1),(0,o.bF)(u,{icon:"chevron-down",class:"page-switcher-arrow"})],8,v),(0,o.Lk)("div",{class:"page-option-list",onMouseleave:n[1]||(n[1]=(...e)=>r.clearHoveredPageOption&&r.clearHoveredPageOption(...e))},[(0,o.Lk)("span",{class:(0,s.C4)(["page-option-highlight",{"is-visible":null!==l.hoveredPageOptionIndex}]),style:(0,s.Tr)({"--hovered-option-index":null===l.hoveredPageOptionIndex?0:l.hoveredPageOptionIndex}),"aria-hidden":"true"},null,6),((0,o.uX)(!0),(0,o.CE)(o.FK,null,(0,o.pI)(r.inactivePageOptions,(n,t)=>((0,o.uX)(),(0,o.CE)("button",{key:n.name,class:"page-option",type:"button",role:"menuitem",onMouseenter:e=>r.setHoveredPageOption(t),onClick:(0,a.D$)(e=>r.handlePageOptionClick(n.name),["stop"])},[(0,o.bF)(u,{icon:n.icon,class:"page-option-icon"},null,8,["icon"]),(0,o.Lk)("span",P,(0,s.v_)(e.$t(n.label)),1)],40,f))),128))],32)])],34),(0,o.bF)(h),(0,o.bF)(g,{class:"tabs-language-switcher"})])}t(44114),t(18111),t(22489),t(20116);var w={name:"DashboardTabs",props:{activeTab:{type:String,default:"dashboard"}},components:{AdminToggleDark:m,LanguageSwitcher:i.A},data(){return{isPageMenuOpen:!1,hoveredPageOptionIndex:null}},computed:{pageOptions(){return[{name:"dashboard",icon:"images",label:"dashboardTabs.fileManagement"},{name:"customerConfig",icon:"user-cog",label:"dashboardTabs.userManagement"},{name:"systemConfig",icon:"cogs",label:"dashboardTabs.systemSettings"},{name:"",icon:"upload",label:"dashboardTabs.fileUpload"}]},activePageOption(){return this.pageOptions.find(e=>e.name===this.activeTab)||this.pageOptions[0]},inactivePageOptions(){return this.pageOptions.filter(e=>e.name!==this.activePageOption.name)}},methods:{handleDocumentClick(e){this.$el?.contains(e.target)||this.closePageMenu()},refreshDashboard(){location.reload()},handleTabClick(e){this.closePageMenu(),e!==this.activeTab?this.$router.push(`/${e}`):this.refreshDashboard()},isTouchViewport(){return window.matchMedia("(hover: none), (pointer: coarse)").matches},handlePageOptionClick(e){!this.isTouchViewport()||this.isPageMenuOpen||e===this.activeTab?e!==this.activeTab?this.handleTabClick(e):this.isTouchViewport()?this.togglePageMenu():this.openPageMenu():this.openPageMenu()},handlePageSwitcherEnter(){this.isTouchViewport()||this.openPageMenu()},handlePageSwitcherLeave(){this.isTouchViewport()||this.closePageMenu()},setHoveredPageOption(e){this.hoveredPageOptionIndex=e},clearHoveredPageOption(){this.hoveredPageOptionIndex=null},openPageMenu(){this.isPageMenuOpen=!0},togglePageMenu(){this.isPageMenuOpen=!this.isPageMenuOpen},closePageMenu(){this.isPageMenuOpen=!1,this.clearHoveredPageOption()}},mounted(){document.addEventListener("click",this.handleDocumentClick)},beforeUnmount(){document.removeEventListener("click",this.handleDocumentClick)}};const y=(0,d.A)(w,[["render",C],["__scopeId","data-v-07e603fa"]]);var M=y},96808:function(e,n,t){t(85331),t(18785),t(67819),t(85970),t(19104)}}]); -//# sourceMappingURL=22.755ee57d.js.map \ No newline at end of file diff --git a/frontend-dist/js/22.755ee57d.js.gz b/frontend-dist/js/22.755ee57d.js.gz deleted file mode 100644 index 04d5c2202196a58e597829f53116c3fdf7a3aa92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2757 zcmV;$3Oe;4iwFP!000023awdNZ`(K)e&1i=a5{wu(5fU~qd*g6(iv>A%}%jxcNc3I z8Cs$xPGr&`DJL04|9wGHvgB)8?7k$jcdXsp1MBT2rTfk(1f~muJ_flfgOtqoFsP9Im^G z!%%tC^+ga>2-YjA3SMon=+Q_yqw!=sg;z0WQuTN=1B$AgfcaI!*TYsM!bqYRmXk29fzeN~t9Y8`sKY}L6|-4_mEg=WUM#jnuGQK=mWL7MXg0jOi7^{j$(G({X%I({-z&Tu>) zOd*P+lHnBz!N*#`=dC+2U#$y8lCY%mKiPI0z@J(F_U|ByB9&3;zM=kPDQDsbL%-Qzp|>q}Z=e&S*$fE6 z5^W-$qZzormoZnz?q|^zi zoZ-;-hizsCqmeg(h)2rt$Cv&HUgbpfaCG5cVfoDB-Zn#}))AEzESVb%k`SgS&SeBB zi}NBO05LZsI3YqtrR%!eUsW9z72!urRc}dDoM~ZA0{4cVe-TB>l?tmuzP#X<7Y9cd zI$v(wn6Fk;IY1J1ldLHF$kUW09~eLvK1AHTu?+~k!}Tg<0J=-caGpOq4vc;(wL2Ar zNL3Y@O#EPau1D$Kq~kjsj=VGRpN=jk=hiR%(XsW@`*XL`Fm$`I+hThM!nzDb{=kDs zS41!j20@c>aa7VI1S%sda);%Ei4)M7IRo(%Kp=hw2naAoBAS{1MKl9^jbo~wyIm-& zyAVYgN}D=JbUO2I=t8{hLfm$tgl+(8ZTn)%?0oM@-3+rNuW1e4+qXwv)?LW<6>j

I`AiHlr?hVNkvO^(bmm&%($@oQ(_lYecXlc4f} zJcj@miubiZfNTqksfcsZ&v3r%OC|V2+s_QGi4l_OIVWLh!zbyV1cbnM2V|uiSI$KU zHdr|QzDeP}iB;eBq`p~)psFAYoufgPn-tXM$%6G)Tx+y8m`-&&gwD)vz`YfEZ&?y7 z9zyN+dn_KRIYf^%QQ6kAjLQ;LXnoa)r03EQx@&TY2&DhMh+2hZn zc3F^E0aR)`0eUun8@D{~$BtL#mv!JVql$nEu_Dh=--mT{jXb--?NPcDN4w}Zauzv` zwQWz^s9uAS_akVu#m}9EV4xTDYteao2|_SxOqrq_&cD-`z~~2lVAPrahw_mQVh9S6 zJ3s7p4cO`yUCrqUrRj++Lv?p)RePadp_x7yW`W(eU>BA*Gdl>B%JIc z;k9neiAKU{7YS!4knkw>hnFN7ZISRQTGx^uqHX)Z3kfQ;iDm!`iu>egjafnxFh`3m z(YibA^zF1&p`}JW?2Z?b5T>*xpoSt~jy|1dZb8y*4U%G%Bhi4Q;yg$~S+qiFMBSTL z;nG9*u(JT_;4okB&T=K7vd`CgM#)_&KjDssonrM;5Z#&@v5QVQK>%vf0S;j9R28YEbv7Gsyj- zso%amxzx;_weXza4GGz7Y=w`{3;(F8j|(?Tdyw*A1NIU_W`rnEM|VY7(T!_+#GMY& zj-qCc-qFR^CgZ5=*M}=W>UrInx?AN`X^>`1q9L|Ynz!3RIY^S@fV{Dr>_+o9W0UQR z!o{(oo6dVzw{3XDNe$48dhkEOrr)DO*X#R$29nGSt_M4q$li1;kSUMNJ#@?+#1R!a zUXUC@)Er-3i$I)_jo_@WGaR6!`;CR*kM-Terfb1rj?~8IR4TBas~ym~&DA(3Sp1c5 zh#*O8u};7!}eIJx`l-z<%J zwf+Dd;ZnAr0TMZS2#)hJk&k5LYZbWD_DtzWq7FAu!EMofOQ9Xq)v>br z->c};UKMqVW{!p)T0;FCOd*`3L0}-w~1>0##)$ z3ppc9$*?q2Pm40c723aC45@ol9e~en{|qmDbUdR?G1MCE_2jxu$E~Y3sV$*nhVv2@R72FKe{Wd;_Qwj6g$8%brSaUoe@Mm zXKjIH*o!$9l0X10IgyPQ`>l|`@}iz)_SDuf+pW!)m&1IxKIQm9+`{9UEVaD?Y2#^$ zH4Z=juIt$@y4}v1$31&pjK#69h&f2AqbF38G{+lTL@IOwo1Et}4H4~nQXbj2=)$Ye zeuR$`9(k#a+i~(ZXFaT+azxiKFPI{_%#yl%U7RGpYzR{ysZ@j!;egnTkf@VFJGBlg zv>;0^$X8~>b%hDC;v4e4@|sU7&)fO>u{&Sip8C=>A!Bc_Y`-+!Mb8zw98bNoUqsBe zSN&kVN$Cgk@uTxWx0=JNzr1_*Lr?NT#N-aI*OaAS|M4*j0(UYR5i*)2?jO=!;q`w3 L#b>!_h8_R_&aF+a diff --git a/frontend-dist/js/22.755ee57d.js.map b/frontend-dist/js/22.755ee57d.js.map deleted file mode 100644 index c7e4963..0000000 --- a/frontend-dist/js/22.755ee57d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/22.755ee57d.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?0caa","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?90ec","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?bba2","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?7379","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?96f9","webpack://sanyue_imghub/./src/components/DashboardTabs.vue","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?1414"],"sourcesContent":["import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"title\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: \"language-switcher\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleLocale && $options.toggleLocale(...args)),\n role: \"button\",\n title: _ctx.$t('language.switchTo')\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n class: \"lang-icon\"\n })], 8, _hoisted_1);\n}","import { setLocale } from '@/locales';\nexport default {\n name: 'LanguageSwitcher',\n computed: {\n isZh() {\n return this.$i18n.locale === 'zh-CN';\n }\n },\n methods: {\n toggleLocale() {\n const next = this.isZh ? 'en' : 'zh-CN';\n setLocale(next);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./LanguageSwitcher.vue?vue&type=template&id=08567d0a&scoped=true\"\nimport script from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\nexport * from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\n\nimport \"./LanguageSwitcher.vue?vue&type=style&index=0&id=08567d0a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08567d0a\"]])\n\nexport default __exports__","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMaskAdmin\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMaskAdmin)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.3em\",\n \"color\": \"var(--admin-theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminToggleDark.vue?vue&type=template&id=5c149ed5&scoped=true\"\nimport script from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./AdminToggleDark.vue?vue&type=style&index=0&id=5c149ed5&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5c149ed5\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tabs\"\n};\nconst _hoisted_2 = [\"aria-expanded\"];\nconst _hoisted_3 = {\n class: \"page-switcher-title\"\n};\nconst _hoisted_4 = [\"onMouseenter\", \"onClick\"];\nconst _hoisted_5 = {\n class: \"page-switcher-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_AdminToggleDark = _resolveComponent(\"AdminToggleDark\");\n const _component_LanguageSwitcher = _resolveComponent(\"LanguageSwitcher\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"page-switcher\", {\n 'is-open': $data.isPageMenuOpen\n }]),\n role: \"navigation\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"stop\"])),\n onPointerdown: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"stop\"])),\n onMouseenter: _cache[5] || (_cache[5] = (...args) => $options.handlePageSwitcherEnter && $options.handlePageSwitcherEnter(...args)),\n onMouseleave: _cache[6] || (_cache[6] = (...args) => $options.handlePageSwitcherLeave && $options.handlePageSwitcherLeave(...args))\n }, [_createElementVNode(\"div\", {\n class: \"page-switcher-sheet\",\n role: \"menu\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"button\", {\n class: \"page-option is-current\",\n type: \"button\",\n role: \"menuitem\",\n \"aria-current\": \"page\",\n \"aria-expanded\": $data.isPageMenuOpen,\n onClick: _cache[0] || (_cache[0] = _withModifiers($event => $options.handlePageOptionClick($options.activePageOption.name), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.activePageOption.icon,\n class: \"page-option-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t($options.activePageOption.label)), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"page-switcher-arrow\"\n })], 8, _hoisted_2), _createElementVNode(\"div\", {\n class: \"page-option-list\",\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.clearHoveredPageOption && $options.clearHoveredPageOption(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"page-option-highlight\", {\n 'is-visible': $data.hoveredPageOptionIndex !== null\n }]),\n style: _normalizeStyle({\n '--hovered-option-index': $data.hoveredPageOptionIndex === null ? 0 : $data.hoveredPageOptionIndex\n }),\n \"aria-hidden\": \"true\"\n }, null, 6), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.inactivePageOptions, (option, index) => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: option.name,\n class: \"page-option\",\n type: \"button\",\n role: \"menuitem\",\n onMouseenter: $event => $options.setHoveredPageOption(index),\n onClick: _withModifiers($event => $options.handlePageOptionClick(option.name), [\"stop\"])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: option.icon,\n class: \"page-option-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(option.label)), 1)], 40, _hoisted_4);\n }), 128))], 32)])], 34), _createVNode(_component_AdminToggleDark), _createVNode(_component_LanguageSwitcher, {\n class: \"tabs-language-switcher\"\n })]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport AdminToggleDark from './dashboard/AdminToggleDark.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nexport default {\n name: 'DashboardTabs',\n props: {\n activeTab: {\n type: String,\n default: 'dashboard'\n }\n },\n components: {\n AdminToggleDark,\n LanguageSwitcher\n },\n data() {\n return {\n isPageMenuOpen: false,\n hoveredPageOptionIndex: null\n };\n },\n computed: {\n pageOptions() {\n return [{\n name: 'dashboard',\n icon: 'images',\n label: 'dashboardTabs.fileManagement'\n }, {\n name: 'customerConfig',\n icon: 'user-cog',\n label: 'dashboardTabs.userManagement'\n }, {\n name: 'systemConfig',\n icon: 'cogs',\n label: 'dashboardTabs.systemSettings'\n }, {\n name: '',\n icon: 'upload',\n label: 'dashboardTabs.fileUpload'\n }];\n },\n activePageOption() {\n return this.pageOptions.find(option => option.name === this.activeTab) || this.pageOptions[0];\n },\n inactivePageOptions() {\n return this.pageOptions.filter(option => option.name !== this.activePageOption.name);\n }\n },\n methods: {\n handleDocumentClick(event) {\n if (this.$el?.contains(event.target)) {\n return;\n }\n this.closePageMenu();\n },\n refreshDashboard() {\n location.reload();\n },\n handleTabClick(tab) {\n this.closePageMenu();\n if (tab === this.activeTab) {\n this.refreshDashboard();\n return;\n }\n this.$router.push(`/${tab}`);\n },\n isTouchViewport() {\n return window.matchMedia('(hover: none), (pointer: coarse)').matches;\n },\n handlePageOptionClick(tab) {\n if (this.isTouchViewport() && !this.isPageMenuOpen && tab !== this.activeTab) {\n this.openPageMenu();\n return;\n }\n if (tab === this.activeTab) {\n if (this.isTouchViewport()) {\n this.togglePageMenu();\n } else {\n this.openPageMenu();\n }\n return;\n }\n this.handleTabClick(tab);\n },\n handlePageSwitcherEnter() {\n if (!this.isTouchViewport()) {\n this.openPageMenu();\n }\n },\n handlePageSwitcherLeave() {\n if (!this.isTouchViewport()) {\n this.closePageMenu();\n }\n },\n setHoveredPageOption(index) {\n this.hoveredPageOptionIndex = index;\n },\n clearHoveredPageOption() {\n this.hoveredPageOptionIndex = null;\n },\n openPageMenu() {\n this.isPageMenuOpen = true;\n },\n togglePageMenu() {\n this.isPageMenuOpen = !this.isPageMenuOpen;\n },\n closePageMenu() {\n this.isPageMenuOpen = false;\n this.clearHoveredPageOption();\n }\n },\n mounted() {\n document.addEventListener('click', this.handleDocumentClick);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardTabs.vue?vue&type=template&id=07e603fa&scoped=true\"\nimport script from \"./DashboardTabs.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardTabs.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardTabs.vue?vue&type=style&index=0&id=07e603fa&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-07e603fa\"]])\n\nexport default __exports__"],"names":["_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","class","onClick","args","toggleLocale","role","title","$t","icon","name","computed","isZh","this","$i18n","locale","methods","next","__exports__","isRedirecting","async","fetchWithAuth","url","options","credentials","headers","response","fetch","status","store","commit","router","push","finally","id","_hoisted_2","_hoisted_3","_hoisted_4","handleToggleClick","mode","default","isAuto","key","style","isDark","width","height","viewBox","fill","stroke","x","y","cx","cy","r","mask","opacity","x1","y1","x2","y2","_","data","$store","getters","useDarkMode","cusDarkMode","_hoisted_5","_component_AdminToggleDark","_component_LanguageSwitcher","isPageMenuOpen","onPointerdown","onMouseenter","handlePageSwitcherEnter","onMouseleave","handlePageSwitcherLeave","type","$event","handlePageOptionClick","activePageOption","label","clearHoveredPageOption","hoveredPageOptionIndex","inactivePageOptions","option","index","setHoveredPageOption","props","activeTab","String","components","AdminToggleDark","LanguageSwitcher","pageOptions","find","filter","handleDocumentClick","event","$el","contains","target","closePageMenu","refreshDashboard","location","reload","handleTabClick","tab","$router","isTouchViewport","window","matchMedia","matches","togglePageMenu","openPageMenu","mounted","document","addEventListener","beforeUnmount","removeEventListener"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/22.755ee57d.js.map.gz b/frontend-dist/js/22.755ee57d.js.map.gz deleted file mode 100644 index a84c65c72c95f006ee34135920218da1889763be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6771 zcmV-(8jR&1iwFP!000023f(;YbKJ&t{|baKzB?OtM;^aKY8ZF1hdWaI7D>^P$e}@C zc?S{)oB`aCCxtV~bUL=vC{Cy8H1SL(O`2&lX=}AjTD!K={xhZ||Kxw6^L7`&;^WAp zBxf@5jE}(X+xNBay?y(3p+|C`c)sO2^8BPCA6Yh$=jCI+TB}uNr>6;-o;54SzO2X{ zz1y{%mM_oC);)xgvWn0uQZ$5g1tWx&Erbu1Erhl(G_KR%Rr=tNcCQxWdhm34&Hm0g4kXm(Y2-&8QdRg7WKy5gz`Z(!)%+Mp-P9%kXhGWM(ZVoUESq8)_$6VDQeCVe45Z)Nz zNbnUfL>>J25ZbnsQ;d!qGisiajvIA`dl%uAGj2hf)F9|wb(k?>geNHB%|*)b3h`#2(N+VwN$X-wyIbvox)9oZ550Ob?A$uax^W7iII|d z)I6hZb&qn^%uFN|BN<|kn?4=V1geWTeq3XGug83^BYY7&56b0RfI^2t$zJjWb35P zEPol{+gN-YMq>%#Gj*2{IaNUc5j_XyjM@_rq*}%Zx9c`1XaT{uxEcwQ}y`Hq;Hak?UYa0Y?WclCam*#T0LV6%5)Bdrrd+Y7glIw*M$rR zq8{?;+PwOZ4V(fr+6G6%);91KY*qyT-jpPE%)|8wi=|D3J$!r_#1gpQu|R44=()MRl_u33E?iz&vfXDD1^<>goB2oWtMZ; zDOhwl@52g?cG+^?(`Z8HsBJBFjKv`dQ@G9&z|Pa)9SGAk4Ynm@QX6%MqfKdwj*u~} zjh2=TG-aTISv=Ij_ZofoG*Hp(qR;Tnjfk%n;$u9+JHyupJ>coZJjKqc4fYIssg0#L z!MTpYb`hSgi`c`3yp2~G_5olY7j|<2f8LFAsdbu5u}R$sXOcj=;AmGdV>Li0JF`sk zn;M9Ne3hwg>n)82D+@Hs1?ODHI?=bYyT|S1Xv#BgMZQc&^zbKiBw+h_#VK=*RdOahu8jvxearL+n zzK_%QSt|U*VqQ`+r#3Rq30MXyD-8e#ET=lg%tt#Etrn>LRF;lCm059}fluQQz6ZgT zzAZV8uyLRwZH{>=ET3kyb6W-*+y%kbIkU^~zRJ>DbkAnubsBVs`5t3B3~j3jSDRvN z3hnv0KFM}3<1GG7P^H|z!}M)jV&f-l8kR*f^&5O2M%U}0Za1QB6&crZ4SF>s8=LVC z!pvTVnsJTI{Ul}f@EX=@X@dQpX@UVyX}q2h8t!tGTUDFk9)xZNn1kx~0ceJ<4m#$G z0&GB<4wq$0MH=kYPcfdWv#Ja?eAqp$%?RlX3-<81eV>BpG-4g|PRG!iK2!j9LR zM!bWr$5zqfa4mqLyXnwQUz<$=co-hW$hc+sm-Kr$x3^AqA!A zTMf{;tI}k|>{6{Szt`Y3I`AkKE}BrUnpOL(=d=M@+z^z&>U@~jN;jc&L^}<{Q#C>% z4re0-V3~CqLpOP2O;dKD^u#rCvq4j6{zii>4G@c6l@Ay+AX!=3W~2z>lcwC zxw{}Fh9+FCGjNC==$P{6t5duh!4bdJpxW`(DkoH@Ql6+T&N5uB(}X(Nx*3Tv)!>D; zCfYD#{3o!!aP*xf%$2s{u&HyK3PBqi-RR9g_qdGUPUwuPa(%ik@QUwnTohar!29E77>jn*+Xr~`meAS-FD%ulFi^ci8c zvO%FMqVyi4#8#PRSX!m!jl`H)tTb_ZvB6f$D|Rl!D$ueb`)&4ov!N;C-AE)y3^|EEwXiL1xA~Am41)BJ#Of_th^eM zR~`TM+&D3=MA8c^+pivxz-aGUK^yggHan&nnYO9>?L$}h%qlWFmb2})S~jWc-U(&m z@KCS4Hf*ntt=Y-hx$9u7huF6DL!W7P=IGThyc+q5sfj6hKQdYDIstJ4uw1Ltb-h4( zBzeSl?LNUF8cFx1gLI=J86MFCa(B%&355{e70K-qN3~t!gmy)5;V8`}9pVHrL{9U$ zbmX}mX;1F=$ew&_&oNxb52S;(Yxw~&4<@7q>A{{HSbXeph$)WQB1e zNrtWa{=Bp&+uU2rK6lqWSz#cqgKf(=ndeeI7~hw^`(3FRzb#0`N~NNEEx#l!d?%8& z5>WGAaSh!j(i?B&cSJ)=oSf&{1Ql55ZYwEGQO2ek+XMZMRSYz;i`< zAX-cDGBrn9fES?IvfV=xkxb}@>zmRj?JLqvMX(l_g>zYn&D20Y%oPso;A|S=$7hy~( zL3qzOza=Yj^-ZbgbnRZta?1T4DaV0DGA&;}w23LbSry_2xLfSEmHg$U-y?4XgDzPJ zNT+M-0eQnR7shW+&&-i zL&VAmgM)!h-mn~#oGpwG6OQ3F{3LS5XB>G$b}Q9NrRumQIq0}%&nA8q=EHV%lXz9r z@`EZHxk&6T@hXgE9>We;mw#{|ElAZjzjbi1v2#Z|IC!&~qE=*5E7F4p1vZxjh5g-E z9uy7^DECWdLD`cbW|sTqP_R9Df4>A`q?|^e9ebW1xE_f-j=mN4yhsI}+Y5*n^|MzB z0RP)0kSzZWF)fc6f#tNM1?fn)eR3;=NU@;%1ILJ$ghawp?0GgURW#yB3(})=@F$OX zLbWPgJpJCqM}PDDM^7$(^_O3M_Sero{o>*W{~%TMt|eW3`1twL?}e~E&z2UXuIC!W z_bbHdSJu|++JUxqm-%+rbIl%Qpdh_Xq35M{0ngZ@o@bxG8!^ubKmX+?U;f|EFMjw} z7eD@&i}(NS+2c>Xe)_>;5Omiadmv%gJ+X-N<LB8_+8iWiL@Z; zr@9p|eJAu>N({4(q+&Rz;s<)r^Qp?F#wTDox{;XcQj)i{9e`Wi5&@`fRSdV&v4Ud3 zCjrgqR@_#Lm`hGUVU|-$jHyHl23|M^!x`PqvnPo91Bn0d;rQ7q{#X?o*+*nSbR5`L7-L?nCB3+*oa^}ez+k6Od9?Nkq zYM8G&p^_;O1rXQ5L>iJ#>BMG5a$K*Y+tx#ZVdC_6^I5?y2{Q1)4ccjFXF58v~nM=?n9kQzXC)7G2aGz(#)L61> zoIzf=CmRFy*JFuq3V4zM=XXxAPPeNYRxtSUN}NrrFXYXFdf6`S)zjs+?wB^mMo}bk z=1gy#IOpfRqM31~S&F$Qg9ge+x*0RwaZTFe_JXn%rn%8LzTVA8Hp(N(gBx_7DwdCW zfh)Z&6-U~E^jm@=CFz6=fVAIp${kn8_@e|o6$6S7xZ)33x_XdCC`koV_f87)Qpg@` zvBTc;{Zd5W)G~uM5TB?_l8!*RO{`Ws$m{7_U2 z^PcPno_j*dl;WNYAho=H+j5AZcNv7|_8fB<)UgW_l?TRvpvUNW9&rNf+OEeYHDM`Y z@Gb7i9o;_xMaIE|f>OJkNLcX%SaCiQSVj`F!Bi!%H%K?cvoJpX?fgkdc7#ekZCe2m z@5%67z zAqQE=+9ZP%;k+!^90i&#q(l`rp|#Tf>k_+`5^qnQNHh&HO_#77!GL+ez@BFpzm;5= zN|{L%C7T>7S8D{3S|fNy1i)9Wj5OoYyfhK}Po+``U7?n6j2bw`5cdM7O?t*eMvnv5 zB($8>vOu(HGSBdbDQa}uwULO|UI+E5N-ax2)yO!QuFOnjcwmjMu7jJE$(igFq*}Qq z<|?x{GmP-oSLYN%=HBQeg`Zgz>nN$02ZSi04;&K1H(%+rSte65V;}M&1CU z=Z6ELBF4~4Yc`!1%B|I^^yOzCKL6*(&wudW&%XEli~s%Y^B+C=`sv4Ce*Vde5C2mt ze@A-u@!#{O7oYy(tB*f={<|-pfAI@=XD|`NM^cg3Yk~8UIEhe%`orH|eE9g;PoMB& z&u@Nt@${pwpZ@UTgZH03{?)|?|DMDqg|%P0Dn^BZbT8cu4Cx)q)J<@#wt_;jmN9IOUPhF( zw!ewue%|qDZf$?sn3$R)=JbfQ{Y&wVQrf>Jf<$Hi^0Dc{ex776QP}^JtnG)gU8}bL zdJc~Rw{H1eTOVu%9+W!)Al0T^r(_8gkyY2Ujx4BfhjqNDWu%&B^u7f~kOZMk3U`qe z%MXPPUlpn0>8(zvjqv4YACk!(c}B-O-h~@c6e|#RcRYqiXhITcfH=tKJJ#su zB`NKUkv=SU`PQ&bTiBK=>eh|G>I>Z!*e#YW)$X-#4-F?qfrrnDc(X_-e?DO6G{D=i zDn@vhD_%O4OfpjpZ%hs6&(;r#4K;J2Uh)!`r;Ik~d#+Q4XqCM~mGm0j^W4)Rx2bAF z<-N=yxh`$X4+O`{i7+`Q8Tk>$u!-(1x_#miGuBojz~qCB8ej6S;tgB7xPWb|)wbbW zB(sL~E#Eq{Nwkc$(|j$#=0du$ut1G0y{_>pPb%{)#w5yRjxn-Zz;_k71x}6^(JzAy zYd^^_(zZ;K@RP1^cPDttOi4);(CD5yKdlgwV>VVuqht55oV0`Zid1C1ibQ4R*C@o2 z(kMwyCPMSNog2rbY(Y+#d!fEIBxYX{wbLtqP7w7;khNtduz)0t)-M^8-C+SZb2@pA z5EKR>HxqEL47sl!bf+%~x^5=I?km#Nc%lx>s)W#4yGhH$lW>#=f2S^q$ElqC63BEq zo(-U|Yb)nm08W)%qf&<9dZc{pSHqeD@hiIL=>vNCh!zoU35AawXe%I|9=KkGZZW)` z0ngVNcVyWCx$Y3hObtlyj@Z4x%H`Me3-S2Oeki|ZQJzHvUcd+&ql+7bNTfpM5^&6Hgf1mE$CugHMJTSSvWscoJS!l^r~J8V!MwOe z-AXc>xCq^i!*tGl=m$czlxsKEgm7BH!bidC=q=)l9n^EhQS@U6_?N_1bw_W}$WVw% zp@~Z^etQD~D*$CtlfbTUV0>$Wh7q13w_0p+pV0HG-TB$rcIVW}tsL z!92;jP-z@ZojVLRzNHgh8dpS{7Z#==m)`|@pf1ltFsw|%(nHe{3Lp7W3DUweiU;Fq zK6287(O7|iHH4WPNoLafl&kOUv!%A~8a*%!w$RcAS>P->3K}E!+YopI-Ew>eRta>k zMS@b|h=hrfuJiLl0>gHF61sJ{qX$Vv=o-V?e>iJU5lJToX;_lQ_C^k z(@IAVjP@!qExlMM(pWez!R0YXYrCxcGcOsg?)jutC^2y2=jtq-Y9&=C90jIXgUiso zON`Xe4*I+?f<7Vr&6$$nx*Tz`hI5?&<6N*)+cC0DR!WCMw%Q}(gmfZ>GO5NCqLeEnj!HuW zX>+>@MV^yo#7rppDvZf9c0Nt{ipp6<+@2EvSYd3-U(1smm5d0&wsx1yib$EQrPA~O=QBEuG*{((B7tjO$44<6{D z9y|bD_{%FE6nc2ILRMtD{MWJ38A(qoHEk)xJ(!+HfV8@v3%J62APj-PbgPko6tYz?z0~dptQhu- z)N%3_HNcg--h-UkeOhF{w3~tDWh-Eh+}ER|R90kGTj9RP78_ZSv-;0bdN;uYY)hG0 zi7HO4c5um&Yio=tfbZ8popi58l_KN{)b)~k8Xg6>NNl?my9>`(DMAo$EON$FE=ZjN z_A1oK!`({wLgMfxup*{b)EjB00mjdz1l^{R3|WyAnFHlHlPN&twpxzs5onR;A4LD& V#2wcS>|9?zTSI+ib001Um6ej=x diff --git a/frontend-dist/js/223.a44c93f4.js b/frontend-dist/js/223.73628f82.js similarity index 98% rename from frontend-dist/js/223.a44c93f4.js rename to frontend-dist/js/223.73628f82.js index 97d889b..37fae2a 100644 --- a/frontend-dist/js/223.a44c93f4.js +++ b/frontend-dist/js/223.73628f82.js @@ -1,2 +1,2 @@ -"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[223],{5802:function(e,t,a){a(85331),a(38736),a(213),a(85970)},64752:function(e,t,a){a(85331),a(38736),a(18785)},72907:function(e,t,a){a(85331),a(96808),a(29092)},94223:function(e,t,a){a.r(t),a.d(t,{default:function(){return D}});var i=a(99114),n=(a(85331),a(30694),a(80047)),o=(a(99648),a(77815)),l=(a(72907),a(55558)),s=(a(10456),a(84757)),d=(a(5802),a(57009)),r=(a(78450),a(64752),a(54880)),c=(a(77128),a(78507)),u=(a(213),a(91570)),h=a(56768),p=a(24232);const m={class:"container"},g={class:"header-content admin-header-content"},f={class:"header-action"},b={class:"main-container"},C={style:{margin:"8px"}},w={style:{"text-align":"center"}},y=["src"],k={key:2,style:{width:"100px",height:"100px",display:"flex","justify-content":"center","align-items":"center"}},v={class:"pagination-container"},L={class:"pagination-center"};function x(e,t,a,x,T,$){const S=u.A,F=(0,h.g2)("font-awesome-icon"),z=c.R7,D=r.bZ,E=s.o8,_=d.Zq,A=s.Up,W=l.qi,P=o.aQ,M=n.S2,U=i.A;return(0,h.uX)(),(0,h.CE)("div",m,[(0,h.bF)(D,null,{default:(0,h.k6)(()=>[(0,h.Lk)("div",g,[(0,h.bF)(S,{activeTab:"customerConfig"}),(0,h.Lk)("div",f,[(0,h.bF)(z,{disabled:$.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,h.k6)(()=>[(0,h.bF)(F,{icon:"sign-out-alt",class:"header-icon",onClick:$.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,h.Lk)("div",b,[(0,h.bo)(((0,h.uX)(),(0,h.Wv)(A,{data:$.paginatedData,"default-sort":{prop:"count",order:"descending"},"row-key":"ip",class:"main-table","table-layout":"fixed",onExpandChange:$.handleExpandChange},{default:(0,h.k6)(()=>[(0,h.bF)(E,{type:"expand",width:"48"},{default:(0,h.k6)(t=>[(0,h.Lk)("div",C,[(0,h.Lk)("h3",w,(0,p.v_)(e.$t("customerConfig.uploadFileList")),1),(0,h.bo)(((0,h.uX)(),(0,h.Wv)(A,{data:t.row.data,style:{width:"100%"},"default-sort":{prop:"metadata.TimeStamp",order:"descending"},"table-layout":"fixed","max-height":400},{default:(0,h.k6)(()=>[(0,h.bF)(E,{prop:"metadata.FileName",label:e.$t("customerConfig.fileNameCol")},null,8,["label"]),(0,h.bF)(E,{label:e.$t("customerConfig.filePreview")},{default:(0,h.k6)(({row:e})=>[e.metadata?.FileType?.includes("image")?((0,h.uX)(),(0,h.Wv)(_,{key:0,src:"/file/"+e.id+"?from=admin",fit:"cover",lazy:"",style:{width:"100px",height:"100px"}},null,8,["src"])):e.metadata?.FileType?.includes("video")?((0,h.uX)(),(0,h.CE)("video",{key:1,src:"/file/"+e.id+"?from=admin",controls:"",style:{width:"100px",height:"100px"}},null,8,y)):((0,h.uX)(),(0,h.CE)("div",k,[(0,h.bF)(F,{icon:"file",style:{"font-size":"2em"}})]))]),_:1},8,["label"]),(0,h.bF)(E,{formatter:$.formatTimeStamp,label:e.$t("customerConfig.uploadTimeCol"),prop:"metadata.TimeStamp",sortable:"","sort-method":$.sortByTimestamp},{default:(0,h.k6)(({row:e})=>[(0,h.eW)((0,p.v_)($.formatTimeStamp(e.metadata.TimeStamp)),1)]),_:1},8,["formatter","label","sort-method"])]),_:1},8,["data"])),[[U,t.row.filesLoading]])])]),_:1}),(0,h.bF)(E,{prop:"ip",label:e.$t("customerConfig.ipAddress"),"min-width":"180"},null,8,["label"]),(0,h.bF)(E,{prop:"address",label:e.$t("customerConfig.address"),"min-width":"220"},null,8,["label"]),(0,h.bF)(E,{prop:"count",label:e.$t("customerConfig.uploadCount"),sortable:"","min-width":"110"},null,8,["label"]),(0,h.bF)(E,{label:e.$t("customerConfig.allowUpload"),fixed:$.allowUploadColumnFixed,width:$.allowUploadColumnWidth,align:"center"},{default:(0,h.k6)(({row:t})=>[(0,h.bF)(W,{class:"allow-upload-switch",modelValue:t.enable,"onUpdate:modelValue":e=>t.enable=e,"active-text":e.$t("customerConfig.allow"),"inactive-text":e.$t("customerConfig.deny"),onChange:e=>$.handleSwitchEnable(t)},null,8,["modelValue","onUpdate:modelValue","active-text","inactive-text","onChange"])]),_:1},8,["label","fixed","width"])]),_:1},8,["data","onExpandChange"])),[[U,T.loading]]),(0,h.Lk)("div",v,[(0,h.Lk)("div",L,[(0,h.bF)(P,{background:"",layout:"prev, pager, next",total:T.dealedData.length,"current-page":T.currentPage,"page-size":T.pageSize,"pager-count":$.pagerCount,onCurrentChange:$.handlePageChange},null,8,["total","current-page","page-size","pager-count","onCurrentChange"]),T.currentPage===Math.ceil(T.dealedData.length/T.pageSize)?((0,h.uX)(),(0,h.Wv)(M,{key:0,type:"primary",onClick:$.loadMoreData,loading:T.loading,class:"load-more"},{default:(0,h.k6)(()=>[(0,h.eW)((0,p.v_)(e.$t("customerConfig.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,h.Q3)("",!0)])])])])}a(44114),a(18111),a(22489),a(61701),a(13579);var T=a(70797),$=a(48903),S={name:"CustomerConfig",mixins:[$.A],data(){return{tableData:[],dealedData:[],blockipList:[],loading:!1,viewportWidth:window.innerWidth,currentPage:1,pageSize:10}},components:{DashboardTabs:u.A},computed:{isMobile(){return this.viewportWidth<768},disableTooltip(){return this.isMobile},pagerCount(){return this.isMobile?3:7},allowUploadColumnFixed(){return!!this.isMobile&&"right"},allowUploadColumnWidth(){return this.isMobile?96:170},paginatedData(){const e=(this.currentPage-1)*this.pageSize,t=e+this.pageSize;return this.dealedData.slice(e,t)}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},formatTimeStamp(e){return new Date(e).toLocaleString()},sortByTimestamp(e,t){return new Date(e.metadata.TimeStamp)-new Date(t.metadata.TimeStamp)},async handleSwitchEnable(e){const t=e.ip,a=e.enable;a?(this.blockipList=this.blockipList.filter(e=>e!==t),await(0,T.A)("/api/manage/cusConfig/whiteip",{method:"POST",body:t})):(this.blockipList.push(t),await(0,T.A)("/api/manage/cusConfig/blockip",{method:"POST",body:t}))},handlePageChange(e){this.currentPage=e,e===Math.ceil(this.dealedData.length/this.pageSize)&&this.loadMoreData()},async handleExpandChange(e,t){if(t.some(t=>t.ip===e.ip)&&!e.filesLoaded&&!e.filesLoading){e.filesLoading=!0;try{const t=await(0,T.A)(`/api/manage/cusConfig/files?ip=${encodeURIComponent(e.ip)}&count=${e.count}`,{method:"GET"}),a=await t.json();e.data=(a.data||[]).sort(this.sortByTimestamp).reverse(),e.filesLoaded=!0}catch(a){this.$message.error(this.$t("customerConfig.loadError"))}finally{e.filesLoading=!1}}},loadMoreData(){this.loading=!0;const e=this.dealedData.length,t=20;(0,T.A)(`/api/manage/cusConfig/list?start=${e}&count=${t}`,{method:"GET"}).then(e=>e.json()).then(e=>{this.dealedData=this.dealedData.concat(e.map(e=>{const t=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:t}}))}).catch(()=>{this.$message.error(this.$t("customerConfig.loadError"))}).finally(()=>{this.loading=!1})},handleSizeChange(e){this.pageSize=e,this.currentPage=1},handleResize(){this.viewportWidth=window.innerWidth}},mounted(){window.addEventListener("resize",this.handleResize),this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,(0,T.A)("/api/manage/cusConfig/list?count=20",{method:"GET"}).then(e=>e.json()).then(async e=>{const t=await(0,T.A)("/api/manage/cusConfig/blockipList",{method:"GET"});this.blockipList=(await t.text()).split(","),this.dealedData=e.map(e=>{const t=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:t}})}).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("customerConfig.syncError"))}).finally(()=>{this.loading=!1})},beforeUnmount(){window.removeEventListener("resize",this.handleResize)}},F=a(71241);const z=(0,F.A)(S,[["render",x],["__scopeId","data-v-1614f9a2"]]);var D=z}}]); -//# sourceMappingURL=223.a44c93f4.js.map \ No newline at end of file +"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[223],{5802:function(e,t,a){a(85331),a(38736),a(213),a(85970)},64752:function(e,t,a){a(85331),a(38736),a(18785)},72907:function(e,t,a){a(85331),a(96808),a(29092)},94223:function(e,t,a){a.r(t),a.d(t,{default:function(){return D}});var i=a(99114),n=(a(85331),a(30694),a(80047)),o=(a(99648),a(77815)),l=(a(72907),a(55558)),s=(a(10456),a(84757)),d=(a(5802),a(57009)),r=(a(78450),a(64752),a(54880)),c=(a(77128),a(78507)),u=(a(213),a(20620)),h=a(56768),p=a(24232);const m={class:"container"},g={class:"header-content admin-header-content"},f={class:"header-action"},b={class:"main-container"},C={style:{margin:"8px"}},w={style:{"text-align":"center"}},y=["src"],k={key:2,style:{width:"100px",height:"100px",display:"flex","justify-content":"center","align-items":"center"}},v={class:"pagination-container"},L={class:"pagination-center"};function x(e,t,a,x,T,$){const S=u.A,F=(0,h.g2)("font-awesome-icon"),z=c.R7,D=r.bZ,E=s.o8,_=d.Zq,A=s.Up,W=l.qi,P=o.aQ,M=n.S2,U=i.A;return(0,h.uX)(),(0,h.CE)("div",m,[(0,h.bF)(D,null,{default:(0,h.k6)(()=>[(0,h.Lk)("div",g,[(0,h.bF)(S,{activeTab:"customerConfig"}),(0,h.Lk)("div",f,[(0,h.bF)(z,{disabled:$.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,h.k6)(()=>[(0,h.bF)(F,{icon:"sign-out-alt",class:"header-icon",onClick:$.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,h.Lk)("div",b,[(0,h.bo)(((0,h.uX)(),(0,h.Wv)(A,{data:$.paginatedData,"default-sort":{prop:"count",order:"descending"},"row-key":"ip",class:"main-table","table-layout":"fixed",onExpandChange:$.handleExpandChange},{default:(0,h.k6)(()=>[(0,h.bF)(E,{type:"expand",width:"48"},{default:(0,h.k6)(t=>[(0,h.Lk)("div",C,[(0,h.Lk)("h3",w,(0,p.v_)(e.$t("customerConfig.uploadFileList")),1),(0,h.bo)(((0,h.uX)(),(0,h.Wv)(A,{data:t.row.data,style:{width:"100%"},"default-sort":{prop:"metadata.TimeStamp",order:"descending"},"table-layout":"fixed","max-height":400},{default:(0,h.k6)(()=>[(0,h.bF)(E,{prop:"metadata.FileName",label:e.$t("customerConfig.fileNameCol")},null,8,["label"]),(0,h.bF)(E,{label:e.$t("customerConfig.filePreview")},{default:(0,h.k6)(({row:e})=>[e.metadata?.FileType?.includes("image")?((0,h.uX)(),(0,h.Wv)(_,{key:0,src:"/file/"+e.id+"?from=admin",fit:"cover",lazy:"",style:{width:"100px",height:"100px"}},null,8,["src"])):e.metadata?.FileType?.includes("video")?((0,h.uX)(),(0,h.CE)("video",{key:1,src:"/file/"+e.id+"?from=admin",controls:"",style:{width:"100px",height:"100px"}},null,8,y)):((0,h.uX)(),(0,h.CE)("div",k,[(0,h.bF)(F,{icon:"file",style:{"font-size":"2em"}})]))]),_:1},8,["label"]),(0,h.bF)(E,{formatter:$.formatTimeStamp,label:e.$t("customerConfig.uploadTimeCol"),prop:"metadata.TimeStamp",sortable:"","sort-method":$.sortByTimestamp},{default:(0,h.k6)(({row:e})=>[(0,h.eW)((0,p.v_)($.formatTimeStamp(e.metadata.TimeStamp)),1)]),_:1},8,["formatter","label","sort-method"])]),_:1},8,["data"])),[[U,t.row.filesLoading]])])]),_:1}),(0,h.bF)(E,{prop:"ip",label:e.$t("customerConfig.ipAddress"),"min-width":"180"},null,8,["label"]),(0,h.bF)(E,{prop:"address",label:e.$t("customerConfig.address"),"min-width":"220"},null,8,["label"]),(0,h.bF)(E,{prop:"count",label:e.$t("customerConfig.uploadCount"),sortable:"","min-width":"110"},null,8,["label"]),(0,h.bF)(E,{label:e.$t("customerConfig.allowUpload"),fixed:$.allowUploadColumnFixed,width:$.allowUploadColumnWidth,align:"center"},{default:(0,h.k6)(({row:t})=>[(0,h.bF)(W,{class:"allow-upload-switch",modelValue:t.enable,"onUpdate:modelValue":e=>t.enable=e,"active-text":e.$t("customerConfig.allow"),"inactive-text":e.$t("customerConfig.deny"),onChange:e=>$.handleSwitchEnable(t)},null,8,["modelValue","onUpdate:modelValue","active-text","inactive-text","onChange"])]),_:1},8,["label","fixed","width"])]),_:1},8,["data","onExpandChange"])),[[U,T.loading]]),(0,h.Lk)("div",v,[(0,h.Lk)("div",L,[(0,h.bF)(P,{background:"",layout:"prev, pager, next",total:T.dealedData.length,"current-page":T.currentPage,"page-size":T.pageSize,"pager-count":$.pagerCount,onCurrentChange:$.handlePageChange},null,8,["total","current-page","page-size","pager-count","onCurrentChange"]),T.currentPage===Math.ceil(T.dealedData.length/T.pageSize)?((0,h.uX)(),(0,h.Wv)(M,{key:0,type:"primary",onClick:$.loadMoreData,loading:T.loading,class:"load-more"},{default:(0,h.k6)(()=>[(0,h.eW)((0,p.v_)(e.$t("customerConfig.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,h.Q3)("",!0)])])])])}a(44114),a(18111),a(22489),a(61701),a(13579);var T=a(70797),$=a(48903),S={name:"CustomerConfig",mixins:[$.A],data(){return{tableData:[],dealedData:[],blockipList:[],loading:!1,viewportWidth:window.innerWidth,currentPage:1,pageSize:10}},components:{DashboardTabs:u.A},computed:{isMobile(){return this.viewportWidth<768},disableTooltip(){return this.isMobile},pagerCount(){return this.isMobile?3:7},allowUploadColumnFixed(){return!!this.isMobile&&"right"},allowUploadColumnWidth(){return this.isMobile?96:170},paginatedData(){const e=(this.currentPage-1)*this.pageSize,t=e+this.pageSize;return this.dealedData.slice(e,t)}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},formatTimeStamp(e){return new Date(e).toLocaleString()},sortByTimestamp(e,t){return new Date(e.metadata.TimeStamp)-new Date(t.metadata.TimeStamp)},async handleSwitchEnable(e){const t=e.ip,a=e.enable;a?(this.blockipList=this.blockipList.filter(e=>e!==t),await(0,T.A)("/api/manage/cusConfig/whiteip",{method:"POST",body:t})):(this.blockipList.push(t),await(0,T.A)("/api/manage/cusConfig/blockip",{method:"POST",body:t}))},handlePageChange(e){this.currentPage=e,e===Math.ceil(this.dealedData.length/this.pageSize)&&this.loadMoreData()},async handleExpandChange(e,t){if(t.some(t=>t.ip===e.ip)&&!e.filesLoaded&&!e.filesLoading){e.filesLoading=!0;try{const t=await(0,T.A)(`/api/manage/cusConfig/files?ip=${encodeURIComponent(e.ip)}&count=${e.count}`,{method:"GET"}),a=await t.json();e.data=(a.data||[]).sort(this.sortByTimestamp).reverse(),e.filesLoaded=!0}catch(a){this.$message.error(this.$t("customerConfig.loadError"))}finally{e.filesLoading=!1}}},loadMoreData(){this.loading=!0;const e=this.dealedData.length,t=20;(0,T.A)(`/api/manage/cusConfig/list?start=${e}&count=${t}`,{method:"GET"}).then(e=>e.json()).then(e=>{this.dealedData=this.dealedData.concat(e.map(e=>{const t=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:t}}))}).catch(()=>{this.$message.error(this.$t("customerConfig.loadError"))}).finally(()=>{this.loading=!1})},handleSizeChange(e){this.pageSize=e,this.currentPage=1},handleResize(){this.viewportWidth=window.innerWidth}},mounted(){window.addEventListener("resize",this.handleResize),this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,(0,T.A)("/api/manage/cusConfig/list?count=20",{method:"GET"}).then(e=>e.json()).then(async e=>{const t=await(0,T.A)("/api/manage/cusConfig/blockipList",{method:"GET"});this.blockipList=(await t.text()).split(","),this.dealedData=e.map(e=>{const t=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:t}})}).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("customerConfig.syncError"))}).finally(()=>{this.loading=!1})},beforeUnmount(){window.removeEventListener("resize",this.handleResize)}},F=a(71241);const z=(0,F.A)(S,[["render",x],["__scopeId","data-v-1614f9a2"]]);var D=z}}]); +//# sourceMappingURL=223.73628f82.js.map \ No newline at end of file diff --git a/frontend-dist/js/223.73628f82.js.gz b/frontend-dist/js/223.73628f82.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d86c293d09017cee1843d715a4a1926461994c2b GIT binary patch literal 2918 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 QTZZ2KFBuJHc7YxM06=fc [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"customerConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_4, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $options.paginatedData,\n \"default-sort\": {\n prop: 'count',\n order: 'descending'\n },\n \"row-key\": \"ip\",\n class: \"main-table\",\n \"table-layout\": \"fixed\",\n onExpandChange: $options.handleExpandChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n type: \"expand\",\n width: \"48\"\n }, {\n default: _withCtx(props => [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.$t('customerConfig.uploadFileList')), 1), _withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: props.row.data,\n style: {\n \"width\": \"100%\"\n },\n \"default-sort\": {\n prop: 'metadata.TimeStamp',\n order: 'descending'\n },\n \"table-layout\": \"fixed\",\n \"max-height\": 400\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"metadata.FileName\",\n label: _ctx.$t('customerConfig.fileNameCol')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.filePreview')\n }, {\n default: _withCtx(({\n row\n }) => [row.metadata?.FileType?.includes('image') ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + row.id + '?from=admin',\n fit: \"cover\",\n lazy: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, [\"src\"])) : row.metadata?.FileType?.includes('video') ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + row.id + '?from=admin',\n controls: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, _hoisted_7)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n style: {\n \"font-size\": \"2em\"\n }\n })]))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n formatter: $options.formatTimeStamp,\n label: _ctx.$t('customerConfig.uploadTimeCol'),\n prop: \"metadata.TimeStamp\",\n sortable: \"\",\n \"sort-method\": $options.sortByTimestamp\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(_toDisplayString($options.formatTimeStamp(row.metadata.TimeStamp)), 1)]),\n _: 1\n }, 8, [\"formatter\", \"label\", \"sort-method\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, props.row.filesLoading]])])]),\n _: 1\n }), _createVNode(_component_el_table_column, {\n prop: \"ip\",\n label: _ctx.$t('customerConfig.ipAddress'),\n \"min-width\": \"180\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"address\",\n label: _ctx.$t('customerConfig.address'),\n \"min-width\": \"220\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"count\",\n label: _ctx.$t('customerConfig.uploadCount'),\n sortable: \"\",\n \"min-width\": \"110\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.allowUpload'),\n fixed: $options.allowUploadColumnFixed,\n width: $options.allowUploadColumnWidth,\n align: \"center\"\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_switch, {\n class: \"allow-upload-switch\",\n modelValue: row.enable,\n \"onUpdate:modelValue\": $event => row.enable = $event,\n \"active-text\": _ctx.$t('customerConfig.allow'),\n \"inactive-text\": _ctx.$t('customerConfig.deny'),\n onChange: $event => $options.handleSwitchEnable(row)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"active-text\", \"inactive-text\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\", \"fixed\", \"width\"])]),\n _: 1\n }, 8, [\"data\", \"onExpandChange\"])), [[_directive_loading, $data.loading]]), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $data.dealedData.length,\n \"current-page\": $data.currentPage,\n \"page-size\": $data.pageSize,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"current-page\", \"page-size\", \"pager-count\", \"onCurrentChange\"]), $data.currentPage === Math.ceil($data.dealedData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('customerConfig.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)])])])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'CustomerConfig',\n mixins: [backgroundManager],\n data() {\n return {\n tableData: [],\n dealedData: [],\n // 根据IP地址处理后的数据,格式为 {ip, count, [data]}\n blockipList: [],\n // 禁止上传的IP列表\n\n loading: false,\n viewportWidth: window.innerWidth,\n // 分页数据\n currentPage: 1,\n pageSize: 10 // 默认每页10条\n };\n },\n components: {\n DashboardTabs\n },\n computed: {\n isMobile() {\n return this.viewportWidth < 768;\n },\n disableTooltip() {\n return this.isMobile;\n },\n pagerCount() {\n return this.isMobile ? 3 : 7;\n },\n allowUploadColumnFixed() {\n return this.isMobile ? 'right' : false;\n },\n allowUploadColumnWidth() {\n return this.isMobile ? 96 : 170;\n },\n paginatedData() {\n // 计算分页数据\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n return this.dealedData.slice(start, end);\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n formatTimeStamp(timeStamp) {\n return new Date(timeStamp).toLocaleString();\n },\n sortByTimestamp(a, b) {\n return new Date(a.metadata.TimeStamp) - new Date(b.metadata.TimeStamp);\n },\n async handleSwitchEnable(row) {\n const ip = row.ip;\n const enable = row.enable;\n if (enable) {\n // 从 blockipList 中移除\n this.blockipList = this.blockipList.filter(item => item !== ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/whiteip\", {\n method: 'POST',\n body: ip\n });\n } else {\n // 添加到 blockipList 中\n this.blockipList.push(ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/blockip\", {\n method: 'POST',\n body: ip\n });\n }\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (page === Math.ceil(this.dealedData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n async handleExpandChange(row, expandedRows) {\n if (!expandedRows.some(item => item.ip === row.ip) || row.filesLoaded || row.filesLoading) return;\n row.filesLoading = true;\n try {\n const response = await fetchWithAuth(`/api/manage/cusConfig/files?ip=${encodeURIComponent(row.ip)}&count=${row.count}`, {\n method: 'GET'\n });\n const result = await response.json();\n row.data = (result.data || []).sort(this.sortByTimestamp).reverse();\n row.filesLoaded = true;\n } catch (err) {\n this.$message.error(this.$t('customerConfig.loadError'));\n } finally {\n row.filesLoading = false;\n }\n },\n loadMoreData() {\n this.loading = true;\n const start = this.dealedData.length;\n const count = 20; // 每次加载20条数据\n fetchWithAuth(`/api/manage/cusConfig/list?start=${start}&count=${count}`, {\n method: 'GET'\n }).then(response => response.json()).then(result => {\n this.dealedData = this.dealedData.concat(result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n }));\n }).catch(() => {\n this.$message.error(this.$t('customerConfig.loadError'));\n }).finally(() => {\n this.loading = false;\n });\n },\n handleSizeChange(size) {\n this.pageSize = size;\n this.currentPage = 1;\n },\n handleResize() {\n this.viewportWidth = window.innerWidth;\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n fetchWithAuth(\"/api/manage/cusConfig/list?count=20\", {\n method: 'GET'\n }).then(response => response.json()).then(async result => {\n // 读取blockipList, 接口返回格式为 'ip1,ip2,ip3',需要转换为数组\n const blockipList = await fetchWithAuth(\"/api/manage/cusConfig/blockipList\", {\n method: 'GET'\n });\n this.blockipList = (await blockipList.text()).split(',');\n this.dealedData = result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n });\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('customerConfig.syncError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomerConfig.vue?vue&type=template&id=1614f9a2&scoped=true\"\nimport script from \"./CustomerConfig.vue?vue&type=script&lang=js\"\nexport * from \"./CustomerConfig.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/admin-common.css?vue&type=style&index=0&id=1614f9a2&scoped=true&lang=css&external\"\nimport \"./CustomerConfig.vue?vue&type=style&index=1&id=1614f9a2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1614f9a2\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","style","_hoisted_6","_hoisted_7","_hoisted_8","key","_hoisted_9","_hoisted_10","render","_ctx","_cache","$props","$setup","$data","$options","_component_DashboardTabs","_component_font_awesome_icon","_component_el_tooltip","_component_el_header","_component_el_table_column","_component_el_image","_component_el_table","_component_el_switch","_component_el_pagination","_component_el_button","_directive_loading","default","activeTab","disabled","disableTooltip","content","$t","placement","icon","onClick","handleLogout","_","data","paginatedData","prop","order","onExpandChange","handleExpandChange","type","width","props","row","label","metadata","FileType","includes","src","id","fit","lazy","controls","formatter","formatTimeStamp","sortable","sortByTimestamp","TimeStamp","filesLoading","fixed","allowUploadColumnFixed","allowUploadColumnWidth","align","modelValue","enable","$event","onChange","handleSwitchEnable","loading","background","layout","total","dealedData","length","currentPage","pageSize","pagerCount","onCurrentChange","handlePageChange","Math","ceil","loadMoreData","name","mixins","backgroundManager","tableData","blockipList","viewportWidth","window","innerWidth","components","DashboardTabs","computed","isMobile","this","start","end","slice","methods","url","fetch","method","credentials","headers","body","JSON","stringify","authType","finally","$store","commit","$router","push","timeStamp","Date","toLocaleString","a","b","ip","filter","item","fetchWithAuth","page","expandedRows","some","filesLoaded","response","encodeURIComponent","count","result","json","sort","reverse","err","$message","error","then","concat","map","address","catch","handleSizeChange","size","handleResize","mounted","addEventListener","initializeBackground","showLogoutButton","state","adminLoggedIn","async","text","split","message","beforeUnmount","removeEventListener","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/223.73628f82.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/views/CustomerConfig.vue?144a","webpack://sanyue_imghub/./src/views/CustomerConfig.vue","webpack://sanyue_imghub/./src/views/CustomerConfig.vue?658e"],"sourcesContent":["import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content admin-header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nconst _hoisted_4 = {\n class: \"main-container\"\n};\nconst _hoisted_5 = {\n style: {\n \"margin\": \"8px\"\n }\n};\nconst _hoisted_6 = {\n style: {\n \"text-align\": \"center\"\n }\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n key: 2,\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\",\n \"display\": \"flex\",\n \"justify-content\": \"center\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_9 = {\n class: \"pagination-container\"\n};\nconst _hoisted_10 = {\n class: \"pagination-center\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"customerConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_4, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $options.paginatedData,\n \"default-sort\": {\n prop: 'count',\n order: 'descending'\n },\n \"row-key\": \"ip\",\n class: \"main-table\",\n \"table-layout\": \"fixed\",\n onExpandChange: $options.handleExpandChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n type: \"expand\",\n width: \"48\"\n }, {\n default: _withCtx(props => [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.$t('customerConfig.uploadFileList')), 1), _withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: props.row.data,\n style: {\n \"width\": \"100%\"\n },\n \"default-sort\": {\n prop: 'metadata.TimeStamp',\n order: 'descending'\n },\n \"table-layout\": \"fixed\",\n \"max-height\": 400\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"metadata.FileName\",\n label: _ctx.$t('customerConfig.fileNameCol')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.filePreview')\n }, {\n default: _withCtx(({\n row\n }) => [row.metadata?.FileType?.includes('image') ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + row.id + '?from=admin',\n fit: \"cover\",\n lazy: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, [\"src\"])) : row.metadata?.FileType?.includes('video') ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + row.id + '?from=admin',\n controls: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, _hoisted_7)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n style: {\n \"font-size\": \"2em\"\n }\n })]))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n formatter: $options.formatTimeStamp,\n label: _ctx.$t('customerConfig.uploadTimeCol'),\n prop: \"metadata.TimeStamp\",\n sortable: \"\",\n \"sort-method\": $options.sortByTimestamp\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(_toDisplayString($options.formatTimeStamp(row.metadata.TimeStamp)), 1)]),\n _: 1\n }, 8, [\"formatter\", \"label\", \"sort-method\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, props.row.filesLoading]])])]),\n _: 1\n }), _createVNode(_component_el_table_column, {\n prop: \"ip\",\n label: _ctx.$t('customerConfig.ipAddress'),\n \"min-width\": \"180\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"address\",\n label: _ctx.$t('customerConfig.address'),\n \"min-width\": \"220\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"count\",\n label: _ctx.$t('customerConfig.uploadCount'),\n sortable: \"\",\n \"min-width\": \"110\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.allowUpload'),\n fixed: $options.allowUploadColumnFixed,\n width: $options.allowUploadColumnWidth,\n align: \"center\"\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_switch, {\n class: \"allow-upload-switch\",\n modelValue: row.enable,\n \"onUpdate:modelValue\": $event => row.enable = $event,\n \"active-text\": _ctx.$t('customerConfig.allow'),\n \"inactive-text\": _ctx.$t('customerConfig.deny'),\n onChange: $event => $options.handleSwitchEnable(row)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"active-text\", \"inactive-text\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\", \"fixed\", \"width\"])]),\n _: 1\n }, 8, [\"data\", \"onExpandChange\"])), [[_directive_loading, $data.loading]]), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $data.dealedData.length,\n \"current-page\": $data.currentPage,\n \"page-size\": $data.pageSize,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"current-page\", \"page-size\", \"pager-count\", \"onCurrentChange\"]), $data.currentPage === Math.ceil($data.dealedData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('customerConfig.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)])])])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'CustomerConfig',\n mixins: [backgroundManager],\n data() {\n return {\n tableData: [],\n dealedData: [],\n // 根据IP地址处理后的数据,格式为 {ip, count, [data]}\n blockipList: [],\n // 禁止上传的IP列表\n\n loading: false,\n viewportWidth: window.innerWidth,\n // 分页数据\n currentPage: 1,\n pageSize: 10 // 默认每页10条\n };\n },\n components: {\n DashboardTabs\n },\n computed: {\n isMobile() {\n return this.viewportWidth < 768;\n },\n disableTooltip() {\n return this.isMobile;\n },\n pagerCount() {\n return this.isMobile ? 3 : 7;\n },\n allowUploadColumnFixed() {\n return this.isMobile ? 'right' : false;\n },\n allowUploadColumnWidth() {\n return this.isMobile ? 96 : 170;\n },\n paginatedData() {\n // 计算分页数据\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n return this.dealedData.slice(start, end);\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n formatTimeStamp(timeStamp) {\n return new Date(timeStamp).toLocaleString();\n },\n sortByTimestamp(a, b) {\n return new Date(a.metadata.TimeStamp) - new Date(b.metadata.TimeStamp);\n },\n async handleSwitchEnable(row) {\n const ip = row.ip;\n const enable = row.enable;\n if (enable) {\n // 从 blockipList 中移除\n this.blockipList = this.blockipList.filter(item => item !== ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/whiteip\", {\n method: 'POST',\n body: ip\n });\n } else {\n // 添加到 blockipList 中\n this.blockipList.push(ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/blockip\", {\n method: 'POST',\n body: ip\n });\n }\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (page === Math.ceil(this.dealedData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n async handleExpandChange(row, expandedRows) {\n if (!expandedRows.some(item => item.ip === row.ip) || row.filesLoaded || row.filesLoading) return;\n row.filesLoading = true;\n try {\n const response = await fetchWithAuth(`/api/manage/cusConfig/files?ip=${encodeURIComponent(row.ip)}&count=${row.count}`, {\n method: 'GET'\n });\n const result = await response.json();\n row.data = (result.data || []).sort(this.sortByTimestamp).reverse();\n row.filesLoaded = true;\n } catch (err) {\n this.$message.error(this.$t('customerConfig.loadError'));\n } finally {\n row.filesLoading = false;\n }\n },\n loadMoreData() {\n this.loading = true;\n const start = this.dealedData.length;\n const count = 20; // 每次加载20条数据\n fetchWithAuth(`/api/manage/cusConfig/list?start=${start}&count=${count}`, {\n method: 'GET'\n }).then(response => response.json()).then(result => {\n this.dealedData = this.dealedData.concat(result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n }));\n }).catch(() => {\n this.$message.error(this.$t('customerConfig.loadError'));\n }).finally(() => {\n this.loading = false;\n });\n },\n handleSizeChange(size) {\n this.pageSize = size;\n this.currentPage = 1;\n },\n handleResize() {\n this.viewportWidth = window.innerWidth;\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n fetchWithAuth(\"/api/manage/cusConfig/list?count=20\", {\n method: 'GET'\n }).then(response => response.json()).then(async result => {\n // 读取blockipList, 接口返回格式为 'ip1,ip2,ip3',需要转换为数组\n const blockipList = await fetchWithAuth(\"/api/manage/cusConfig/blockipList\", {\n method: 'GET'\n });\n this.blockipList = (await blockipList.text()).split(',');\n this.dealedData = result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n });\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('customerConfig.syncError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomerConfig.vue?vue&type=template&id=1614f9a2&scoped=true\"\nimport script from \"./CustomerConfig.vue?vue&type=script&lang=js\"\nexport * from \"./CustomerConfig.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/admin-common.css?vue&type=style&index=0&id=1614f9a2&scoped=true&lang=css&external\"\nimport \"./CustomerConfig.vue?vue&type=style&index=1&id=1614f9a2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1614f9a2\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","style","_hoisted_6","_hoisted_7","_hoisted_8","key","_hoisted_9","_hoisted_10","render","_ctx","_cache","$props","$setup","$data","$options","_component_DashboardTabs","_component_font_awesome_icon","_component_el_tooltip","_component_el_header","_component_el_table_column","_component_el_image","_component_el_table","_component_el_switch","_component_el_pagination","_component_el_button","_directive_loading","default","activeTab","disabled","disableTooltip","content","$t","placement","icon","onClick","handleLogout","_","data","paginatedData","prop","order","onExpandChange","handleExpandChange","type","width","props","row","label","metadata","FileType","includes","src","id","fit","lazy","controls","formatter","formatTimeStamp","sortable","sortByTimestamp","TimeStamp","filesLoading","fixed","allowUploadColumnFixed","allowUploadColumnWidth","align","modelValue","enable","$event","onChange","handleSwitchEnable","loading","background","layout","total","dealedData","length","currentPage","pageSize","pagerCount","onCurrentChange","handlePageChange","Math","ceil","loadMoreData","name","mixins","backgroundManager","tableData","blockipList","viewportWidth","window","innerWidth","components","DashboardTabs","computed","isMobile","this","start","end","slice","methods","url","fetch","method","credentials","headers","body","JSON","stringify","authType","finally","$store","commit","$router","push","timeStamp","Date","toLocaleString","a","b","ip","filter","item","fetchWithAuth","page","expandedRows","some","filesLoaded","response","encodeURIComponent","count","result","json","sort","reverse","err","$message","error","then","concat","map","address","catch","handleSizeChange","size","handleResize","mounted","addEventListener","initializeBackground","showLogoutButton","state","adminLoggedIn","async","text","split","message","beforeUnmount","removeEventListener","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/223.73628f82.js.map.gz b/frontend-dist/js/223.73628f82.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..c7187dab888e9f4f4efbc607f1edcdc8509deb92 GIT binary patch literal 7451 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 ZgY>`8xDy1iUf1>G{|DvUZ<+~S007SLqPYM7 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/223.a44c93f4.js.gz b/frontend-dist/js/223.a44c93f4.js.gz deleted file mode 100644 index 061847183790efff150514303aa6ef00dd0e9d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2918 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 YNdNncJ3$cZbzMLHe;D}$DhXZy02dE~jQ{`u diff --git a/frontend-dist/js/417.f95b3308.js.gz b/frontend-dist/js/417.f95b3308.js.gz deleted file mode 100644 index fe8ff5f73df8e47c1fc801211b8b9eff70baa471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108374 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%0AV@vjbJb^9f&KO2$iWHkq8z_ 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 diff --git a/frontend-dist/js/417.f95b3308.js.map.gz b/frontend-dist/js/417.f95b3308.js.map.gz deleted file mode 100644 index 5445a73b87e5775c0b0bc3cff189cc1c477b6e72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369620 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≷zn`E@WRPuIHQKOk6lvuub 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≈n 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�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 z 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�r(9oGv1w_BUMMTvmIt-a5L1k;+-Ft_@2<;g~ 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 diff --git a/frontend-dist/js/437.fa57fedd.js b/frontend-dist/js/437.fa57fedd.js new file mode 100644 index 0000000..4ff3605 --- /dev/null +++ b/frontend-dist/js/437.fa57fedd.js @@ -0,0 +1,2 @@ +(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[437],{213:function(e,t,o){"use strict";o(85331),o(19104)},732:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var a=o(56768),l=o(24232);const i=["href","target"],s=["alt","src"];function n(e,t,o,n,r,d){return(0,a.uX)(),(0,a.CE)("a",{href:d.logoHref,target:o.target,class:(0,l.C4)(e.logo-e.link)},[(0,a.Lk)("img",{class:(0,l.C4)(d.logoClasses),alt:o.alt,src:d.logoUrl},null,10,s)],10,i)}var r=o(60782),d={name:"Logo",props:{href:{type:String,default:"https://github.com/MarSeventh/CloudFlare-ImgBed"},target:{type:String,default:"_blank",validator:e=>["_blank","_self","_parent","_top"].includes(e)},alt:{type:String,default:"Sanyue logo"},customSrc:{type:String,default:""},position:{type:String,default:"fixed",validator:e=>["fixed","relative","absolute","static"].includes(e)},size:{type:String,default:"normal",validator:e=>["small","normal","large"].includes(e)},enableHover:{type:Boolean,default:!0},useConfigLink:{type:Boolean,default:!1}},computed:{...(0,r.L8)(["userConfig"]),logoUrl(){return this.customSrc||this.userConfig?.logoUrl||o(33153)},logoHref(){return this.useConfigLink&&this.userConfig?.logoLink?this.userConfig.logoLink:this.href},logoClasses(){return{logo:!0,[`logo--${this.position}`]:!0,[`logo--${this.size}`]:!0,"logo--hover-enabled":this.enableHover}}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-17f54292"]]);var p=u},2893:function(e,t,o){"use strict";o(85331)},3261:function(e,t,o){"use strict";o(85331)},4885:function(e,t,o){"use strict";o(85331)},10456:function(e,t,o){"use strict";o(85331)},11393:function(e,t,o){o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(a){if(t[a])return t[a].exports;var l=t[a]={i:a,l:!1,exports:{}};return e[a].call(l.exports,l,l.exports,o),l.l=!0,l.exports}return o.m=e,o.c=t,o.d=function(e,t,a){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)o.d(a,l,function(t){return e[t]}.bind(null,l));return a},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var a;function l(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return s}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return f}),o.d(t,"urltoImage",function(){return g}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return v}),o.d(t,"EImageType",function(){return a}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(a||(a={}));var i=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function s(e,t=.92,o=a.JPEG){return i(this,void 0,void 0,function*(){return l(o)||(o=a.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=a.JPEG){return new Promise(a=>e.toBlob(e=>a(e),o,t))}var r=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let a=o[0].match(/:(.*?);/)[1];const i=atob(o[1]);let s=i.length;const n=new Uint8Array(s);for(;s--;)n[s]=i.charCodeAt(s);return l(t)&&(a=t),new Blob([n],{type:a})})}function c(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),a.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const a=document.createEvent("MouseEvents");a.initEvent("click",!1,!1),o.dispatchEvent(a),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),a=document.createElement("canvas"),l=a.getContext("2d");let i,s;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;s=e.width*t,i=e.height*t}else s=o.width||o.height*e.width/e.height||e.width,i=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(a.height=s,a.width=i):(a.height=i,a.width=s),o.orientation){case 3:l.rotate(180*Math.PI/180),l.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 6:l.rotate(90*Math.PI/180),l.drawImage(e,0,-a.width,a.height,a.width);break;case 8:l.rotate(270*Math.PI/180),l.drawImage(e,-a.height,0,a.height,a.width);break;case 2:l.translate(a.width,0),l.scale(-1,1),l.drawImage(e,0,0,a.width,a.height);break;case 4:l.translate(a.width,0),l.scale(-1,1),l.rotate(180*Math.PI/180),l.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 5:l.translate(a.width,0),l.scale(-1,1),l.rotate(90*Math.PI/180),l.drawImage(e,0,-a.width,a.height,a.width);break;case 7:l.translate(a.width,0),l.scale(-1,1),l.rotate(270*Math.PI/180),l.drawImage(e,-a.height,0,a.height,a.width);break;default:l.drawImage(e,0,0,a.width,a.height)}return a})}function f(e){return fetch(e).then(e=>e.blob())}function g(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),a.src=e})}var y=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let i=o.split(",")[0].match(/:(.*?);/)[1],n=a.JPEG;l(t.type)&&(n=t.type,i=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield s(u,t.quality,n),f=yield d(h,i);return f.size>e.size?e:f})}function v(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,i=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=a.JPEG;l(t.type)&&(h=t.type,u=t.type);const f=yield c(r),g=yield m(f,Object.assign({},t));let y,b=.5;const v=[null,null];for(let e=1;e<=7;e++){y=yield s(g,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...v].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-i)-Math.abs(.75*t.length-i))[0]);break}if(ot))break;v[0]=y,b+=Math.pow(.5,e+1)}}const k=yield d(y,u);return k.size>e.size?e:k})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33153:function(e,t,o){"use strict";e.exports=o.p+"img/logo.e8dbfa27.png"},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var a=o(99114),l=(o(85331),o(30694),o(49385)),i=(o(37952),o(30650)),s=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},f={class:"node-label"},g={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},v={class:"node-label"};function k(e,t,o,k,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=s.qk,$=i.Vc,S=l.pw,T=a.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:C.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>C.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[C.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",f,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(S,{modelValue:C.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>C.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",g,[C.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",v,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:1},8,["modelValue","title"])],64))])}var C=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await C.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",k],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},34896:function(e,t,o){"use strict";o(85331)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},42550:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var a=o(56768),l=o(45130),i=o(24232);const s={id:"themeMask"},n=["cx","cy","r"],r=["r"],d=["opacity"];function c(e,t,o,c,u,p){const h=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>p.handleToggleClick&&p.handleToggleClick(...e))},[(0,a.bF)(l.eB,{name:"icon-fade",mode:"out-in"},{default:(0,a.k6)(()=>[u.isAuto?((0,a.uX)(),(0,a.Wv)(h,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.5em",color:"var(--theme-toggle-color)"}})):((0,a.uX)(),(0,a.CE)("svg",{key:"sun-moon",class:(0,i.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.5em",height:"1.5em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,a.Lk)("mask",s,[t[1]||(t[1]=(0,a.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,a.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,n)]),(0,a.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMask)"},null,8,r),(0,a.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},[...t[2]||(t[2]=[(0,a.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,a.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,a.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,d)],2))]),_:1})])}var u={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},p=o(71241);const h=(0,p.A)(u,[["render",c],["__scopeId","data-v-e9449eac"]]);var m=h},44437:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return qo}});var a=o(78507),l=(o(85331),o(213),o(80047)),i=(o(99648),o(56768)),s=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},f=["src"],g=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},v={class:"grid-actions"},k={class:"grid-info"},C=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},_=["title"],x=["title"],A={class:"list-meta"},M={class:"upload-time"},R={class:"list-actions"},E={key:0,class:"load-more-container"},D={key:0,class:"loading-indicator"},P={key:1,class:"load-more-hint"},I={key:1,class:"no-more-hint"},N={key:1,class:"empty-state"};function V(e,t,o,V,z,W){const B=(0,i.g2)("font-awesome-icon"),H=l.S2,Q=a.R7;return(0,i.uX)(),(0,i.CE)("div",{class:(0,s.C4)(["history-container",{active:o.show}])},[(0,i.Lk)("div",n,[(0,i.Lk)("div",r,[(0,i.Lk)("h2",null,(0,s.v_)(e.$t("uploadHistory.title")),1),(0,i.Lk)("span",d,(0,s.v_)(e.$t("uploadHistory.totalRecords",{count:z.totalCount})),1)]),(0,i.Lk)("div",c,[(0,i.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",onClick:W.toggleViewMode},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"grid"===z.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",type:"danger",onClick:W.clearHistory},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"times"})]),_:1})])]),z.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>W.handleScroll&&W.handleScroll(...e))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(W.groupedHistory,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.date,class:"history-group"},[(0,i.Lk)("div",u,[t[4]||(t[4]=(0,i.Lk)("div",{class:"timeline-dot"},null,-1)),(0,i.Lk)("span",p,(0,s.v_)(e.date),1)]),"grid"===z.viewMode?((0,i.uX)(),(0,i.CE)("div",h,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"grid-item"},[(0,i.Lk)("div",m,[W.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,f)):W.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,g)):((0,i.uX)(),(0,i.CE)("div",y,[(0,i.bF)(B,{icon:"file",class:"file-icon"})])),(0,i.Lk)("div",b,[(0,i.Lk)("div",v,[(0,i.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,i.Lk)("div",k,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,s.v_)(e.name),9,C),(0,i.Lk)("div",w,(0,s.v_)(W.formatTime(e.time)),1)])]))),128))])):((0,i.uX)(),(0,i.CE)("div",F,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"list-item"},[(0,i.Lk)("div",L,[W.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,U)):W.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,i.uX)(),(0,i.CE)("div",S,[(0,i.bF)(B,{icon:"file"})]))]),(0,i.Lk)("div",T,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,s.v_)(e.name),9,_),(0,i.Lk)("div",{class:"file-url",title:e.url},(0,s.v_)(e.url),9,x)]),(0,i.Lk)("div",A,[(0,i.Lk)("div",M,(0,s.v_)(W.formatTime(e.time)),1)]),(0,i.Lk)("div",R,[(0,i.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),W.hasMore?((0,i.uX)(),(0,i.CE)("div",E,[z.loadingMore?((0,i.uX)(),(0,i.CE)("div",D,[(0,i.bF)(B,{icon:"spinner",spin:""}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadHistory.loading")),1)])):((0,i.uX)(),(0,i.CE)("div",P,(0,s.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):z.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",I,(0,s.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,i.Q3)("",!0)],544)):((0,i.uX)(),(0,i.CE)("div",N,[(0,i.bF)(B,{icon:"history",class:"empty-icon"}),(0,i.Lk)("p",null,(0,s.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var z={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),a=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[a]||(e[a]=[]),e[a].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,a=t.scrollHeight,l=t.clientHeight;a-o-l<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),l=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${a}-${l} ${i}:${s}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},W=o(71241);const B=(0,W.A)(z,[["render",V],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),O=(o(15616),o(81418)),q=(o(50333),o(74757)),j=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(4885),o(97769));o(34396),o(3261);const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},ae={class:"setting-item channel-type-setting"},le={class:"channel-type-toolbar"},ie={class:"setting-label"},se={key:0,class:"channel-empty-state"},ne={key:0,class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"setting-item"},pe={class:"setting-label"},he={class:"dialog-section"},me={class:"section-header"},fe={class:"section-title"},ge={class:"section-content"},ye={class:"dialog-section"},be={class:"section-header"},ve={class:"section-title"},ke={class:"section-content"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={class:"setting-item"},Le={class:"setting-label"},Ue={key:0,class:"setting-item slider-item"},$e={class:"setting-label"},Se={class:"slider-wrapper"},Te={class:"slider-input-wrapper"},_e={key:1,class:"setting-item slider-item"},xe={class:"setting-label"},Ae={class:"slider-wrapper"},Me={class:"slider-input-wrapper"},Re={key:0,class:"dialog-section"},Ee={class:"section-header"},De={class:"section-title"},Pe={class:"section-content"},Ie={class:"setting-item"},Ne={class:"setting-label"},Ve={class:"dialog-action"};function ze(e,t,o,n,r,d){const c=J.Zh,u=J.MQ,p=Y.A,h=J.ll,m=(0,i.g2)("font-awesome-icon"),f=a.R7,g=K.P9,y=K.AV,b=G.WK,v=j.qi,k=q.B8,C=O.lq,w=l.S2,F=X.kZ;return(0,i.uX)(),(0,i.Wv)(F,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[13]||(t[13]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Z,[(0,i.Lk)("div",ee,[(0,i.Lk)("span",te,(0,s.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,i.Lk)("div",oe,[(0,i.Lk)("div",ae,[(0,i.Lk)("div",le,[(0,i.Lk)("span",ie,(0,s.v_)(e.$t("uploadSettings.channelType")),1),(0,i.bF)(u,{modelValue:r.channelVisibility,"onUpdate:modelValue":t[0]||(t[0]=e=>r.channelVisibility=e),size:"small",class:"channel-visibility-filter",onChange:d.handleChannelVisibilityChange},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"all"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.allChannels")),1)]),_:1}),(0,i.bF)(c,{label:"configured"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.configuredChannelsOnly")),1)]),_:1})]),_:1},8,["modelValue","onChange"])]),(0,i.bF)(u,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.visibleChannelOptions,e=>((0,i.uX)(),(0,i.Wv)(h,{key:e.value,label:e.value,class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:e.value,class:"channel-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,s.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value"]),"configured"===r.channelVisibility&&0===d.visibleChannelOptions.length?((0,i.uX)(),(0,i.CE)("div",se,(0,s.v_)(e.$t("uploadSettings.noConfiguredChannels")),1)):(0,i.Q3)("",!0)]),o.currentChannelList.length>1?((0,i.uX)(),(0,i.CE)("div",ne,[(0,i.Lk)("span",re,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(y,{"model-value":o.channelName,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,i.Q3)("",!0),(0,i.Lk)("div",de,[(0,i.Lk)("span",ce,(0,s.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,i.bF)(b,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,i.Lk)("div",ue,[(0,i.Lk)("span",pe,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(v,{"model-value":o.autoRetry,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,i.Lk)("div",he,[(0,i.Lk)("div",me,[(0,i.Lk)("span",fe,(0,s.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,i.Lk)("div",ge,[(0,i.bF)(u,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:"default",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"cog",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,i.bF)(h,{label:"index",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"hashtag",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,i.bF)(h,{label:"origin",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"file-signature",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,i.bF)(h,{label:"short",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"compress-alt",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,i.Lk)("div",ye,[(0,i.Lk)("div",be,[(0,i.Lk)("span",ve,(0,s.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,i.bF)(f,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",ke,[(0,i.Lk)("div",Ce,[(0,i.Lk)("span",we,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(v,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,i.Lk)("div",Fe,[(0,i.Lk)("span",Le,(0,s.v_)(e.$t("uploadSettings.fileCompress")),1),(0,i.bF)(v,{"model-value":o.customerCompress,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Ue,[(0,i.Lk)("span",$e,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Se,[(0,i.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,i.Lk)("div",Te,[(0,i.bF)(C,{"model-value":o.compressBar,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[14]||(t[14]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",_e,[(0,i.Lk)("span",xe,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Ae,[(0,i.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,i.Lk)("div",Me,[(0,i.bF)(C,{"model-value":o.compressQuality,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[15]||(t[15]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,i.uX)(),(0,i.CE)("div",Re,[(0,i.Lk)("div",Ee,[(0,i.Lk)("span",De,(0,s.v_)(e.$t("uploadSettings.serverCompress")),1),(0,i.bF)(f,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Pe,[(0,i.Lk)("div",Ie,[(0,i.Lk)("span",Ne,(0,s.v_)(e.$t("uploadSettings.enableCompress")),1),(0,i.bF)(v,{"model-value":o.serverCompress,"onUpdate:modelValue":t[11]||(t[11]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Ve,[(0,i.bF)(w,{type:"primary",onClick:t[12]||(t[12]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}const We=[{value:"telegram",label:"TG"},{value:"cfr2",label:"R2"},{value:"s3",label:"S3"},{value:"discord",label:"DC"},{value:"huggingface",label:"HF"},{value:"webdav",label:"WD"}];var Be={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},data(){return{channelVisibility:"configured"}},methods:{hasConfiguredChannels(e){const t=this.availableChannels[e];return Array.isArray(t)&&t.length>0},handleChannelVisibilityChange(e){"configured"===e&&this.ensureConfiguredChannelSelected()},ensureConfiguredChannelSelected(){if("configured"!==this.channelVisibility||this.hasConfiguredChannels(this.uploadChannel))return;const e=this.visibleChannelOptions[0];e&&this.$emit("update:uploadChannel",e.value)},handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},availableChannels:{type:Object,default:()=>({})},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],watch:{availableChannels:{handler(){this.ensureConfiguredChannelSelected()},deep:!0}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},visibleChannelOptions(){return"all"===this.channelVisibility?We:We.filter(e=>this.hasConfiguredChannels(e.value))},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const He=(0,W.A)(Be,[["render",ze],["__scopeId","data-v-25aa00bd"]]);var Qe=He,Xe=o(88559),Oe=(o(85970),o(813)),qe=(o(34896),o(69655)),je=(o(2893),o(74253));o(79899);const Ge={class:"upload-list-item"},Ke=["href"],Je={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ye=["src"],Ze=["src"],et={key:2,style:{width:"10vw","border-radius":"12px"}},tt={class:"upload-list-item-content"},ot={class:"upload-list-item-name-wrapper"},at={key:0,class:"upload-list-item-url"},lt={class:"upload-list-item-url-row"},it={class:"upload-list-item-url-row"},st={key:1,class:"upload-list-item-progress"},nt={class:"upload-list-item-action"};function rt(e,t,o,a,l,n){const r=(0,i.g2)("font-awesome-icon"),d=je.$g,c=G.WK,u=qe.ve,p=(0,i.g2)("Link"),h=Oe.tk,m=(0,i.g2)("Delete");return(0,i.uX)(),(0,i.CE)("div",Ge,[(0,i.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,i.uX)(),(0,i.CE)("video",Je,[(0,i.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ye),t[7]||(t[7]=(0,i.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,i.uX)(),(0,i.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ze)):((0,i.uX)(),(0,i.CE)("div",et,[(0,i.bF)(r,{icon:"file",class:"file-icon"})]))],8,Ke),(0,i.Lk)("div",tt,[(0,i.Lk)("div",ot,[(0,i.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,i.uX)(),(0,i.CE)("div",at,[(0,i.Lk)("div",lt,[(0,i.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[8]||(t[8]=[(0,i.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,i.Lk)("div",it,[(0,i.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[10]||(t[10]=[(0,i.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[11]||(t[11]=[(0,i.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,i.uX)(),(0,i.CE)("div",st,[(0,i.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,i.Lk)("div",nt,[(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(p)]),_:1})]),(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(m)]),_:1})])])])}var dt=o(57477);const ct=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],ut=["mp4","webm","ogg","mkv"];var pt={name:"UploadFileItem",components:{Link:dt.Link,Delete:dt.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return ct.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return ut.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,l;o>0?(a=e.substring(0,o),l=e.substring(o)):(a=e,l="");const i=l.length+4,s=t-i-3;return s<=0?e.substring(0,t-3)+"...":a.substring(0,s)+"..."+a.slice(-4)+l},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ht=(0,W.A)(pt,[["render",rt],["__scopeId","data-v-645a7810"]]);var mt=ht,ft=o(62086),gt=(o(40670),o(88830),o(23597),o(70683)),yt=(o(95385),o(47358)),bt=o(45130);const vt={class:"upload-form"},kt={ref:"clipboardPasteReceiver",class:"clipboard-paste-receiver",tabindex:"-1","aria-hidden":"true"},Ct={class:"upload-card-glow",ref:"uploadCardGlow"},wt={class:"upload-prompt-row"},Ft=["innerHTML"],Lt=["aria-label"],Ut={key:0,class:"upload-card"},$t={class:"paste-card-actions"},St=["aria-label"],Tt=["aria-pressed"],_t=["aria-pressed"],xt={class:"upload-list-container"},At={class:"upload-list-dashboard-action"},Mt={class:"modern-action-group"},Rt={class:"modern-dropdown-item-content"},Et={class:"modern-action-btn modern-action-btn-danger"};function Dt(e,t,n,r,d,c){const u=Oe.tk,p=(0,i.g2)("font-awesome-icon"),h=a.R7,m=yt.j5,f=G.WK,g=l.S2,y=gt.Ik,b=(0,i.g2)("List"),v=(0,i.g2)("Checked"),k=(0,i.g2)("Failed"),C=je.$g,w=j.qi,F=ft.c6,L=ft.Iy,U=ft.dW,$=mt,S=Xe.kA;return(0,i.uX)(),(0,i.CE)("div",vt,[(0,i.Lk)("textarea",kt,null,512),(0,i.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[2]||(t[2]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[3]||(t[3]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e)),onDropCapture:t[4]||(t[4]=(0,bt.D$)((...e)=>c.handleDrop&&c.handleDrop(...e),["stop","prevent"]))},[(0,i.Lk)("div",Ct,null,512),"default"===n.uploadMethod?((0,i.uX)(),(0,i.Wv)(m,{key:0,class:(0,s.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{class:(0,s.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[...t[12]||(t[12]=[(0,i.Lk)("svg",{class:"upload-plus-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.25","stroke-linecap":"round","aria-hidden":"true"},[(0,i.Lk)("path",{d:"M12 7v10"}),(0,i.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,i.Lk)("div",wt,[(0,i.Lk)("div",{class:(0,s.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText",{pasteShortcut:c.pasteShortcut})},null,10,Ft),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.selectFolderUpload"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{type:"button",class:(0,s.C4)(["folder-upload-icon-button",{"upload-list-busy":d.fileList.length}]),"aria-label":e.$t("upload.selectFolderUpload"),onClick:t[0]||(t[0]=(0,bt.D$)((...e)=>c.openFolderPicker&&c.openFolderPicker(...e),["stop","prevent"]))},[(0,i.bF)(p,{icon:"folder-open"})],10,Lt)]),_:1},8,["disabled","content"])])]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,i.Q3)("",!0),(0,i.Lk)("input",{ref:"folderInput",class:"folder-upload-input",type:"file",webkitdirectory:"",directory:"",multiple:"",onChange:t[1]||(t[1]=(...e)=>c.handleFolderSelection&&c.handleFolderSelection(...e))},null,544)],32),"paste"===n.uploadMethod?((0,i.uX)(),(0,i.CE)("div",Ut,[(0,i.bF)(y,{class:(0,s.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[5]||(t[5]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,i.Lk)("div",$t,[(0,i.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,i.Lk)("div",{class:(0,s.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,i.Lk)("button",{class:(0,s.C4)(["paste-card-method-button",{"is-active":"save"===d.pasteUploadMethod}]),type:"button","aria-pressed":"save"===d.pasteUploadMethod,onClick:t[6]||(t[6]=e=>d.pasteUploadMethod="save")},(0,s.v_)(e.$t("upload.pasteSave")),11,Tt),(0,i.Lk)("button",{class:(0,s.C4)(["paste-card-method-button",{"is-active":"external"===d.pasteUploadMethod}]),type:"button","aria-pressed":"external"===d.pasteUploadMethod,onClick:t[7]||(t[7]=e=>d.pasteUploadMethod="external")},(0,s.v_)(e.$t("upload.pasteExternal")),11,_t)],10,St)])]),_:1},8,["class"])])):(0,i.Q3)("",!0),(0,i.bF)(y,{class:(0,s.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.Lk)("div",xt,[(0,i.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",{class:(0,s.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,i.bF)(C,{class:"upload-list-dashboard-title"},{default:(0,i.k6)(()=>[(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(b)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(v)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadSuccessCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(k)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadErrorCount),1)]),_:1}),(0,i.Lk)("div",At,[(0,i.Lk)("div",Mt,[(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[8]||(t[8]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,i.bF)(p,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",Rt,[(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadForm.autoRetry")),1),(0,i.bF)(w,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[10]||(t[10]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[9]||(t[9]=(...e)=>c.retryError&&c.retryError(...e))},[(0,i.bF)(p,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,{onClick:c.clearFileList},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,i.bF)(F,{onClick:c.clearSuccessList},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",Et,[(0,i.bF)(p,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.fileList.slice().reverse(),e=>((0,i.uX)(),(0,i.Wv)($,{key:e.uid,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[11]||(t[11]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])])]),_:1},8,["class"])])}o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979);var Pt=o(457),It=o(76334),Nt=o(60782);function Vt(e,t,o){const a=o+e;return{finalURL:a,mdURL:`![${t}](${a})`,htmlURL:`${t}`,ubbURL:`[img]${a}[/img]`}}function zt(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function Wt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=Vt(e.srcID,e.name,t);Object.assign(e,o)})}const Bt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ht=(e,t)=>e>>>t|e<<32-t;function Qt(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=Ht(o[u-15],7)^Ht(o[u-15],18)^o[u-15]>>>3,t=Ht(o[u-2],17)^Ht(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[a,l,i,s,n,r,d,c]=t;for(let u=0;u<64;u++){const e=Ht(n,6)^Ht(n,11)^Ht(n,25),t=n&r^~n&d,p=c+e+t+Bt[u]+o[u]>>>0,h=Ht(a,2)^Ht(a,13)^Ht(a,22),m=a&l^a&i^l&i,f=h+m>>>0;c=d,d=r,r=n,n=s+p>>>0,s=i,i=l,l=a,a=p+f>>>0}t[0]=t[0]+a>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+i>>>0,t[3]=t[3]+s>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Xt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,a=0;return{update(l){a+=l.length;let i=0;if(o>0){const a=64-o,s=Math.min(a,l.length);t.set(l.subarray(0,s),o),o+=s,i=s,64===o&&(Qt(t,e),o=0)}while(i+64<=l.length)Qt(l.subarray(i,i+64),e),i+=64;i56&&(t.fill(0,o,64),Qt(t,e),o=0),t.fill(0,o,56);const i=new DataView(t.buffer);i.setUint32(56,Math.floor(l/4294967296),!1),i.setUint32(60,l>>>0,!1),Qt(t,e);let s="";for(let t=0;t<8;t++)s+=e[t].toString(16).padStart(8,"0");return s}}}async function Ot(e){const t=Xt(),o=4194304;let a=0;while(ae&&"."!==e).map(e=>".."===e?"_":e).join("/")}function jt(e=""){const t=qt(e),o=t.lastIndexOf("/");return-1===o?"":t.slice(0,o)}function Gt(e="",t=""){const o=/^[\\/]/.test(String(e).trim()),a=[qt(e),qt(t)].filter(Boolean).join("/");return a?o?`/${a}`:a:""}function Kt(e=[]){return Array.from(e).map(e=>({file:e,relativePath:qt(e.webkitRelativePath||e.relativePath||e.name)}))}function Jt(e){return new Promise((t,o)=>e.file(t,o))}async function Yt(e){const t=e.createReader(),o=[];while(1){const e=await new Promise((e,o)=>t.readEntries(e,o));if(!e.length)break;o.push(...e)}return o}async function Zt(e,t,o){const a=qt([t,e.name].filter(Boolean).join("/"));if(e.isFile){const t=await Jt(e);return void o.push({file:t,relativePath:a})}if(e.isDirectory){const t=await Yt(e);for(const e of t)await Zt(e,a,o)}}async function eo(e,t,o){const a=qt([t,e.name].filter(Boolean).join("/"));if("file"!==e.kind){if("directory"===e.kind)for await(const l of e.values())await eo(l,a,o)}else o.push({file:await e.getFile(),relativePath:a})}async function to(e=[]){const t=Array.from(e).filter(e=>"file"===e.kind),o=[],a=await Promise.all(t.map(async e=>{if("function"!==typeof e.getAsFileSystemHandle)return null;try{return await e.getAsFileSystemHandle()}catch{return null}}));for(let l=0;lthis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){Wt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&Wt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Nt.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},pasteShortcut(){const e=navigator.userAgentData?.platform||navigator.platform||"";return/mac|iphone|ipad|ipod/i.test(e)?"Cmd + V":"Ctrl + V"},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),document.addEventListener("keydown",this.handlePasteShortcut),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),document.removeEventListener("keydown",this.handlePasteShortcut),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{createLocalUid(){return this.localUidCounter+=1,`local-${Date.now()}-${this.localUidCounter}`},applyUploadPath(e,t=e.name){const o=String(t||e.name).replace(/\\/g,"/").replace(/^\/+/,"");return e.uploadRelativePath=o,e.uploadFolder=Gt(this.uploadFolder,jt(o)),e},copyUploadPath(e,t){return t.uploadRelativePath=e.uploadRelativePath||e.name,t.uploadFolder=e.uploadFolder??this.uploadFolder,t},getFileUploadFolder(e){const t=this.fileList.find(t=>t.uid===e.file.uid);return t?.uploadFolder??e.file.uploadFolder??this.uploadFolder},createUploadRequest(e){return{file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)}},async uploadLocalEntries(e){await Promise.allSettled(e.map(async({file:e,relativePath:t})=>{e.uid=this.createLocalUid(),this.applyUploadPath(e,t);const o=await this.beforeUpload(e);o instanceof File&&this.uploadFile(this.createUploadRequest(o))}))},openFolderPicker(){this.$refs.folderInput?.click()},async handleFolderSelection(e){const t=Kt(e.target.files);e.target.value="",await this.uploadLocalEntries(t)},async handleDrop(e){const t=e.dataTransfer;if(!t)return;const o=t.items?.length?await to(t.items):Kt(t.files);o.length&&await this.uploadLocalEntries(o)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,l;o>0?(a=e.substring(0,o),l=e.substring(o)):(a=e,l="");const i=l.length+4,s=t-i-3;return s<=0?e.substring(0,t-3)+"...":a.substring(0,s)+"..."+a.slice(-4)+l},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),a=o?.uploadChannel||this.uploadChannel;if("external"===a)return void this.uploadSingleFile(e);if("huggingface"===a){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===a){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const l=20971520;e.file.size>l?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,a=t.uploadChannel||this.uploadChannel,l=this.autoRetry&&"external"!==a,i="external"===a?"default":this.uploadNameType,s=this.getFileUploadFolder(e),n=new AbortController;this.abortControllers.set(e.file.uid,n);const r=new FormData;if(r.append("file",e.file),"external"===a&&r.append("url",e.file.url),"huggingface"===a)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await Ot(e.file);r.append("sha256",t),console.log("SHA256 computed:",t)}catch(d){console.error("Failed to compute SHA256:",d)}(0,Pt.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+a+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+i+"&autoRetry="+l+"&uploadFolder="+encodeURIComponent(s),method:"post",data:r,withAuthCode:!0,signal:n.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,a=new AbortController;this.abortControllers.set(e.file.uid,a);const l="discord"===o?9437184:16777216,i=e.file.size,s=e.file.type||"application/octet-stream",n=Math.ceil(i/l),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType,u=this.getFileUploadFolder(e);let p=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),p=await Ot(e.file),console.log("SHA256 computed:",p)}catch(h){console.error("Failed to compute SHA256:",h)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",s),t.append("totalChunks",n.toString());const m=await(0,Pt.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(u)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!m.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+m.data.message);const f=m.data.uploadId;console.log("分块上传初始化成功,uploadId:",f);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=f);const y=3,b=new Array(n).fill(0);let v=0,k=!1,C="",w=!1;const F=async t=>{if(k||w)return;const p=t*l,m=Math.min(p+l,i),g=e.file.slice(p,m),y=new FormData;y.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),y.append("chunkIndex",t.toString()),y.append("totalChunks",n.toString()),y.append("uploadId",f),y.append("originalFileName",e.file.name),y.append("originalFileType",s);let v=0;const F=3;while(v{if(k||w)return;const a=Math.round(o.loaded/o.total*100);b[t]=a;const l=Math.round(b.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:l,file:e.file})}})}catch(h){if("CanceledError"===h.name||"ERR_CANCELED"===h.code)return w=!0,void console.log("分块上传已取消:",e.file.name);if(v++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${v}/${F}):`,h),v>=F)throw k=!0,C=`分块 ${t+1}/${n} 上传失败: ${h.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*v))}}},L=[];for(let e=0;e{while(vt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),h.response&&401!==h.response.status?(this.exceptionList.push(e),e.onError(h,e.file)):h.response||(this.exceptionList.push(e),e.onError(h,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,Pt.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const a=o.uploadChannel||this.uploadChannel;if("external"!==a){const a=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+a;const l=Vt(a,t.name,this.rootUrl);Object.assign(o,l),o.srcID=a}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(a){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(zt(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let a=e;const l=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(l)try{const t=await this.convertImageToWebp(e);t&&(a=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const i=a.type.includes("image")&&this.customerCompress&&a.size/1024/1024>this.compressBar,s=a.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const a=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.uploadRelativePath||e.name,url:a,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,uploadFolder:e.uploadFolder??this.uploadFolder,retryCount:0}),t(e)};if(i)It.compressAccurately(a,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const l=new File([t],a.name,{type:t.type});l.uid=e.uid,this.copyUploadPath(a,l);const i=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;n(l,i)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:a.name})),o(e)});else if(s){this.uploading=!0;const e="telegram"===this.uploadChannel&&this.serverCompress&&(!a.type.includes("image")||a.size/1024/1024<10);n(a,e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>zt(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},isEditablePasteTarget(e){const t=e?.nodeType===Node.TEXT_NODE?e.parentElement:e;if(!t)return!1;const o=t.tagName;return"INPUT"===o||"TEXTAREA"===o||t.isContentEditable||Boolean(t.closest?.('[contenteditable="true"]'))},handlePasteShortcut(e){const t=(e.ctrlKey||e.metaKey)&&!e.altKey&&"v"===String(e.key).toLowerCase();if(!t||this.isEditablePasteTarget(e.target))return;const o=this.$refs.clipboardPasteReceiver;if(o){this.pasteFocusTarget=document.activeElement,o.value="";try{o.focus({preventScroll:!0})}catch{o.focus()}}},releasePasteReceiver(e){const t=this.$refs.clipboardPasteReceiver;if(!t||e!==t)return;t.value="";const o=this.pasteFocusTarget;this.pasteFocusTarget=null,setTimeout(()=>{if(o?.isConnected&&"function"===typeof o.focus)try{o.focus({preventScroll:!0})}catch{o.focus()}else t.blur();document.activeElement===t&&t.blur()},0)},async handlePaste(e){const t=e.target===this.$refs.clipboardPasteReceiver;if(!t&&this.isEditablePasteTarget(e.target))return;const o=e.clipboardData;if(!o)return void this.releasePasteReceiver(e.target);const a=Array.from(o.items||[]),l=a.filter(e=>"file"===e.kind),i=a.filter(e=>"string"===e.kind),s=Kt(o.files||[]);if(t&&e.preventDefault(),this.releasePasteReceiver(e.target),s.length>0||l.length>0){e.preventDefault();let t=[];if(l.length)try{t=await to(l)}catch(n){console.warn("Failed to parse clipboard items, falling back to clipboard files:",n)}t.length||(t=s),t.length&&await this.uploadLocalEntries(t)}i.length>0&&this.uploadFromUrl(i)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,s=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:l,htmlURL:i,ubbURL:s,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let a="";o.test(e)&&Pt.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const i=o.headers["content-disposition"];if(i){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(i);if(null!=o&&o[1]){a=o[1].replace(/['"]/g,"");try{a=decodeURIComponent(a)}catch(l){a=""}}""===a&&(o=t.exec(i),null!=o&&o[1]&&(a=decodeURIComponent(o[1])))}if(""===a){const t=new URL(e);a=t.pathname.split("/").pop()}if(""===a){const o=new URL(e);let l=o.pathname.split(".").pop();(!l||""===l||l.length>10)&&(l="bin"),a="PastedFile"+Date.now()+t+"."+l}const s=o.data,n=new File([s],a,{type:s.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);const a=this.getFileUploadFolder(e);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await Ot(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const l=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),i=btoa(String.fromCharCode(...l));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const s=await(0,Pt.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:i,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:a},withAuthCode:!0,signal:o.signal});if(!s.data.success)throw new Error(s.data.error||"Failed to get upload URL");const n=s.data;if(console.log("Upload info:",n),n.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(n.needsLfs&&n.uploadAction){const{href:t,header:a}=n.uploadAction;if(a?.chunk_size)await this.uploadToHuggingFaceMultipart(e,n,o);else{console.log("Uploading to S3 (basic)...");const l=await fetch(t,{method:"PUT",headers:a||{},body:e.file,signal:o.signal});if(!l.ok){const e=await l.text();throw new Error(`S3 upload failed: ${l.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const r=await(0,Pt.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:n.fullId,filePath:n.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:n.channelName},withAuthCode:!0,signal:o.signal});if(!r.data.success)throw new Error(r.data.error||"Failed to commit file");console.log("Upload complete:",r.data);const d={data:[{src:r.data.src}]};e.onSuccess(d,e.file)}catch(l){if("CanceledError"===l.name||"ERR_CANCELED"===l.code||"AbortError"===l.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",l),this.exceptionList.push(e),e.onError(l,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:a}=t,{href:l,header:i}=a,s=parseInt(i.chunk_size),n=Object.keys(i).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${s}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,a=t*s,l=Math.min(a+s,e.file.size),n=e.file.slice(a,l);console.log(`Uploading part ${u}/${d}`);const c=await fetch(i[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(l,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const a=new Image,l=document.createElement("canvas"),i=l.getContext("2d");a.onload=()=>{l.width=a.width,l.height=a.height,i.drawImage(a,0,0),l.toBlob(l=>{if(l){const o=e.name,a=o.lastIndexOf("."),i=a>0?o.substring(0,a)+".webp":o+".webp",s=new File([l],i,{type:"image/webp"});s.uid=e.uid,this.copyUploadPath(e,s),t(s)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(a.src)},"image/webp",.92)},a.onerror=()=>{URL.revokeObjectURL(a.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},a.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),a=e.clientX-o.left,l=e.clientY-o.top;t.style.opacity="1",t.style.left=a+"px",t.style.top=l+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const ao=(0,W.A)(oo,[["render",Dt],["__scopeId","data-v-0fa6b946"]]);var lo=ao,io=o(732),so=o(33892);const no={class:"directory-suggestion-input",ref:"wrapperRef"},ro={class:"suggestion-dropdown"},co={class:"suggestion-list"},uo=["title","onMousedown"];function po(e,t,o,a,l,n){const r=G.WK;return(0,i.uX)(),(0,i.CE)("div",no,[(0,i.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,i.bo)((0,i.Lk)("div",ro,[(0,i.Lk)("ul",co,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.suggestions,(e,t)=>((0,i.uX)(),(0,i.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,bt.D$)(t=>n.selectItem(e),["prevent"])},(0,s.v_)(e.value),41,uo))),128))])],512),[[bt.aG,l.dropdownVisible&&l.suggestions.length>0]])],512)}var ho={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),a=this.directoryChildrenMap[o];a&&a.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const a=this.normalizeDirectoryPath(e.path),l=Array.isArray(e.children)?e.children:[];t[a]=l.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),l.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await Pt.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),a=o.split("/"),l=a[a.length-1]||"",i=a.slice(0,-1).filter(Boolean),s=i.length>0?`/${i.join("/")}/`:"/";return{segmentInput:l,parentPath:s}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),a=this.directoryChildrenMap[o]||[];if(!t)return a.slice(0,10).map(e=>({value:e.path}));const l=t.toLowerCase();return a.filter(e=>e.name.toLowerCase().startsWith(l)).slice(0,10).map(e=>({value:e.path}))}}};const mo=(0,W.A)(ho,[["render",po],["__scopeId","data-v-28b8eda7"]]);var fo=mo,go=o(42550);const yo={class:"container"},bo={class:"upload-home"},vo={class:"quick-toolbar-actions"},ko={class:"quick-toolbar-actions-inner"},Co={class:"header"},wo={class:"title"},Fo={class:"title-crayon-text","aria-hidden":"true"},Lo={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},Uo={class:"dialog-section"},$o={class:"section-header"},So={class:"section-title"},To={class:"section-content"},_o={class:"dialog-section"},xo={class:"section-header"},Ao={class:"section-title"},Mo={class:"section-content"},Ro={class:"setting-item"},Eo={class:"setting-label"},Do={key:0,class:"setting-item"},Po={class:"setting-label"},Io={class:"dialog-action"},No=["innerHTML"],Vo={class:"dialog-footer"};function zo(e,t,o,n,r,d){const c=go.A,u=(0,i.g2)("font-awesome-icon"),p=l.S2,h=ft.c6,m=ft.Iy,f=ft.dW,g=fo,y=G.WK,b=so.A,v=a.R7,k=io.A,C=lo,w=J.ll,F=J.MQ,L=j.qi,U=X.kZ,$=Qe,S=Q.A,T=H;return(0,i.uX)(),(0,i.CE)("div",yo,[(0,i.Lk)("div",bo,[(0,i.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,i.bF)(f,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,s.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,i.Lk)("div",{class:(0,s.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(g,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,i.uX)(),(0,i.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,i.k6)(()=>[(0,i.bF)(p,{class:"directory-tree-trigger"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,i.Q3)("",!0)],2),(0,i.bF)(v,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,i.k6)(()=>["default"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,i.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,i.bF)(f,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"toggleTheme"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,s.v_)(d.getThemeText()),1)]),_:1}),(0,i.bF)(h,{command:"toggleUploadMethod"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,s.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"mobile-more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,s.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,i.Lk)("div",vo,[(0,i.Lk)("div",ko,[(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,i.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,i.bF)(p,{class:(0,s.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,i.bF)(k,{useConfigLink:!0}),(0,i.Lk)("div",Co,[(0,i.Lk)("h1",wo,[(0,i.Lk)("span",Fo,(0,s.v_)(d.ownerName)+" ImgHub",1),(0,i.Lk)("a",Lo,(0,s.v_)(d.ownerName),1),t[24]||(t[24]=(0,i.eW)(" ImgHub ",-1))])]),(0,i.bF)(C,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,i.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[10]||(t[10]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Uo,[(0,i.Lk)("div",$o,[(0,i.Lk)("span",So,(0,s.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,i.Lk)("div",To,[(0,i.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[6]||(t[6]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(w,{value:"url",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,i.bF)(w,{value:"md",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,i.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,i.bF)(w,{value:"html",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,i.Lk)("span",null,"HTML",-1))]),_:1}),(0,i.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,i.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,i.Lk)("div",_o,[(0,i.Lk)("div",xo,[(0,i.Lk)("span",Ao,(0,s.v_)(e.$t("settings.customLink")),1),(0,i.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Mo,[(0,i.Lk)("div",Ro,[(0,i.Lk)("span",Eo,(0,s.v_)(e.$t("settings.enableCustom")),1),(0,i.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,i.uX)(),(0,i.CE)("div",Do,[(0,i.Lk)("span",Po,(0,s.v_)(e.$t("settings.customPrefix")),1),(0,i.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[8]||(t[8]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,i.Q3)("",!0)])]),(0,i.Lk)("div",Io,[(0,i.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,i.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[11]||(t[11]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[12]||(t[12]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[13]||(t[13]=e=>r.channelName=e),availableChannels:r.availableChannels,currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[14]||(t[14]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[15]||(t[15]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[16]||(t[16]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[17]||(t[17]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[18]||(t[18]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[19]||(t[19]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[20]||(t[20]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[21]||(t[21]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","availableChannels","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,i.bF)(S,{class:"footer"}),(0,i.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Vo,[(0,i.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",{innerHTML:r.announcementContent},null,8,No)]),_:1},8,["title","modelValue","width"]),(0,i.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var Wo=o(46638),Bo=o(48903),Ho=o(90144),Qo=o(62388),Xo={name:"UploadHome",mixins:[Bo.A],data(){return{selectedUrlForm:(0,Ho.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,isQuickToolbarOpen:!1,isQuickToolbarPinned:!1,showAnnouncementDialog:!1,announcementContent:"",displayedAnnouncementRefreshAt:null,showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,Qo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Nt.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!0,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto",this.showAnnouncementIfNeeded()},components:{UploadForm:lo,Footer:Q.A,ToggleDark:go.A,Logo:io.A,UploadHistory:H,UploadSettingsDialog:Qe,DirectoryTreePicker:so.A,DirectorySuggestionInput:fo},methods:{async fetchAvailableChannels(){try{const e=await Pt.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,a=this.availableChannels[this.uploadChannel]||[];t&&a.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&a.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,Qo.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){Pt.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleQuickToolbarMoreEnter(){this.isQuickToolbarOpen=!0},handleQuickToolbarLeave(){this.isQuickToolbarPinned||(this.isQuickToolbarOpen=!1)},toggleQuickToolbar(){this.isQuickToolbarPinned=!this.isQuickToolbarPinned,this.isQuickToolbarOpen=this.isQuickToolbarPinned},closeQuickToolbar(){this.isQuickToolbarPinned=!1,this.isQuickToolbarOpen=!1},handleQuickToolbarCommand(e){this.closeQuickToolbar(),"linkFormat"===e?this.openUrlDialog():"manage"===e?this.handleManage():"logout"===e&&this.handleLogout()},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,Wo.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,Wo.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?this.openAnnouncement(e):this.$message.info(this.$t("upload.noAnnouncement"))},getAnnouncementRefreshAt(){const e=Number(this.userConfig?.announcementRefreshAt);return Number.isFinite(e)&&e>0?e:null},openAnnouncement(e){this.announcementContent=e,this.displayedAnnouncementRefreshAt=this.getAnnouncementRefreshAt(),this.showAnnouncementDialog=!0},showAnnouncementIfNeeded(){const e=this.userConfig?.announcement;if(!e)return;const t=this.getAnnouncementRefreshAt();if(t){const o=Number(localStorage.getItem("announcementAcknowledgedRefreshAt"));return void((!Number.isFinite(o)||t>o)&&this.openAnnouncement(e))}localStorage.getItem("announcementAcknowledgedAt")||this.openAnnouncement(e)},acknowledgeAnnouncement(){localStorage.setItem("announcementAcknowledgedAt",String(Date.now())),this.displayedAnnouncementRefreshAt&&localStorage.setItem("announcementAcknowledgedRefreshAt",String(this.displayedAnnouncementRefreshAt)),this.showAnnouncementDialog=!1},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const Oo=(0,W.A)(Xo,[["render",zo],["__scopeId","data-v-15adb2dc"]]);var qo=Oo},50333:function(e,t,o){"use strict";o(85331),o(29092)},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return l}});var a=o(46638);function l(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:a.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:a.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:a.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:a.Ay.global.t("validation.consecutiveSlashNotAllowed")};const l=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return l.test(e)?{valid:!1,error:a.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return s}});o(44114);var a=o(25507),l=o(16915);let i=!1;async function s(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||i||(i=!0,a.A.commit("setAdminLoggedIn",!1),l.A.push("/adminLogin").finally(()=>{i=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},86975:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var a=o(56768),l=o(24232);const i={key:0,class:"page-footer"},s=["href"];function n(e,t,o,n,r,d){const c=(0,a.g2)("font-awesome-icon");return d.disableFooter?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("div",i,[(0,a.Lk)("p",null,[(0,a.eW)("© 2024-"+(0,l.v_)(d.thisYear)+" Designed by ",1),t[0]||(t[0]=(0,a.Lk)("a",{class:"footer-name",href:"https://github.com/MarSeventh",target:"_blank"},"SanyueQi",-1)),t[1]||(t[1]=(0,a.eW)(" for You! ",-1)),(0,a.Lk)("a",{href:d.footerLink,target:"_blank"},[(0,a.bF)(c,{icon:"paper-plane",class:"footer-link-icon"})],8,s)])]))}var r=o(60782),d={name:"Footer",computed:{...(0,r.L8)(["userConfig"]),footerLink(){return this.userConfig?.footerLink||"https://github.com/MarSeventh"},thisYear(){return(new Date).getFullYear()},disableFooter(){return this.userConfig?.disableFooter||!1}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-08acbaa9"]]);var p=u},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)},97769:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var a=o(56768);const l={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},s={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${o.type}`]}),["telegram"===o.type?((0,a.uX)(),(0,a.CE)("svg",l,[...t[0]||(t[0]=[(0,a.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,a.uX)(),(0,a.CE)("svg",i,[...t[1]||(t[1]=[(0,a.Fv)('',9)])])):"webdav"===o.type?((0,a.uX)(),(0,a.CE)("svg",s,[...t[2]||(t[2]=[(0,a.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,a.uX)(),(0,a.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-ce6ff2ce"]]);var u=c}}]); +//# sourceMappingURL=437.fa57fedd.js.map \ No newline at end of file diff --git a/frontend-dist/js/437.fa57fedd.js.gz b/frontend-dist/js/437.fa57fedd.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8002faa4404c176e554fb12cc0607bd3cc2bd804 GIT binary patch literal 33797 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 R*X*n~|Nm|KllQjM0RRpl9zy^C literal 0 HcmV?d00001 diff --git a/frontend-dist/js/437.fa57fedd.js.map b/frontend-dist/js/437.fa57fedd.js.map new file mode 100644 index 0000000..262279a --- /dev/null +++ b/frontend-dist/js/437.fa57fedd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/437.fa57fedd.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/Logo.vue?a6d2","webpack://sanyue_imghub/./src/components/Logo.vue","webpack://sanyue_imghub/./src/components/Logo.vue?4125","webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./src/components/ToggleDark.vue?611b","webpack://sanyue_imghub/./src/components/ToggleDark.vue","webpack://sanyue_imghub/./src/components/ToggleDark.vue?0bce","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?942e","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?d5f5","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?8a66","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?adb2","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?6ec5","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?420c","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?b0fe","webpack://sanyue_imghub/./src/utils/upload/urlBuilder.js","webpack://sanyue_imghub/./src/utils/upload/sha256.js","webpack://sanyue_imghub/./src/utils/upload/directoryTraversal.js","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?bdbd","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?6707","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?69c3","webpack://sanyue_imghub/./src/views/UploadHome.vue?b554","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./node_modules/image-conversion/index.js","webpack://sanyue_imghub/./src/components/Footer.vue?4f81","webpack://sanyue_imghub/./src/components/Footer.vue","webpack://sanyue_imghub/./src/components/Footer.vue?d468","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?3436","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05"],"sourcesContent":["import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"href\", \"target\"];\nconst _hoisted_2 = [\"alt\", \"src\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"a\", {\n href: $options.logoHref,\n target: $props.target,\n class: _normalizeClass(_ctx.logo - _ctx.link)\n }, [_createElementVNode(\"img\", {\n class: _normalizeClass($options.logoClasses),\n alt: $props.alt,\n src: $options.logoUrl\n }, null, 10, _hoisted_2)], 10, _hoisted_1);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Logo',\n props: {\n // Logo链接地址(可被用户配置覆盖)\n href: {\n type: String,\n default: 'https://github.com/MarSeventh/CloudFlare-ImgBed'\n },\n // 链接打开方式\n target: {\n type: String,\n default: '_blank',\n // _blank, _self, _parent, _top\n validator: value => ['_blank', '_self', '_parent', '_top'].includes(value)\n },\n // 图片alt文本\n alt: {\n type: String,\n default: 'Sanyue logo'\n },\n // 自定义logo图片URL(可选)\n customSrc: {\n type: String,\n default: ''\n },\n // Logo位置样式\n position: {\n type: String,\n default: 'fixed',\n // fixed, relative, absolute\n validator: value => ['fixed', 'relative', 'absolute', 'static'].includes(value)\n },\n // Logo大小\n size: {\n type: String,\n default: 'normal',\n // small, normal, large\n validator: value => ['small', 'normal', 'large'].includes(value)\n },\n // 是否启用悬停动画\n enableHover: {\n type: Boolean,\n default: true\n },\n // 是否允许使用用户配置的链接(仅上传页面启用)\n useConfigLink: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n ...mapGetters(['userConfig']),\n logoUrl() {\n // 优先级:customSrc > 用户配置 > 默认图片\n return this.customSrc || this.userConfig?.logoUrl || require('../assets/logo.png');\n },\n logoHref() {\n // 只有启用 useConfigLink 时才使用用户配置的链接\n if (this.useConfigLink && this.userConfig?.logoLink) {\n return this.userConfig.logoLink;\n }\n return this.href;\n },\n logoClasses() {\n return {\n 'logo': true,\n [`logo--${this.position}`]: true,\n [`logo--${this.size}`]: true,\n 'logo--hover-enabled': this.enableHover\n };\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Logo.vue?vue&type=template&id=17f54292&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\n\nimport \"./Logo.vue?vue&type=style&index=0&id=17f54292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-17f54292\"]])\n\nexport default __exports__","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMask\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.5em\",\n height: \"1.5em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMask)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.5em\",\n \"color\": \"var(--theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ToggleDark.vue?vue&type=template&id=e9449eac&scoped=true\"\nimport script from \"./ToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleDark.vue?vue&type=style&index=0&id=e9449eac&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e9449eac\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=7da2f8c2&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=7da2f8c2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7da2f8c2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item channel-type-setting\"\n};\nconst _hoisted_6 = {\n class: \"channel-type-toolbar\"\n};\nconst _hoisted_7 = {\n class: \"setting-label\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"channel-empty-state\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"setting-item\"\n};\nconst _hoisted_14 = {\n class: \"setting-label\"\n};\nconst _hoisted_15 = {\n class: \"dialog-section\"\n};\nconst _hoisted_16 = {\n class: \"section-header\"\n};\nconst _hoisted_17 = {\n class: \"section-title\"\n};\nconst _hoisted_18 = {\n class: \"section-content\"\n};\nconst _hoisted_19 = {\n class: \"dialog-section\"\n};\nconst _hoisted_20 = {\n class: \"section-header\"\n};\nconst _hoisted_21 = {\n class: \"section-title\"\n};\nconst _hoisted_22 = {\n class: \"section-content\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n class: \"setting-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_28 = {\n class: \"setting-label\"\n};\nconst _hoisted_29 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_30 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_32 = {\n class: \"setting-label\"\n};\nconst _hoisted_33 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_34 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_35 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_36 = {\n class: \"section-header\"\n};\nconst _hoisted_37 = {\n class: \"section-title\"\n};\nconst _hoisted_38 = {\n class: \"section-content\"\n};\nconst _hoisted_39 = {\n class: \"setting-item\"\n};\nconst _hoisted_40 = {\n class: \"setting-label\"\n};\nconst _hoisted_41 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope upload-settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n modelValue: $data.channelVisibility,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelVisibility = $event),\n size: \"small\",\n class: \"channel-visibility-filter\",\n onChange: $options.handleChannelVisibilityChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"all\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.allChannels')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"configured\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.configuredChannelsOnly')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])]), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.visibleChannelOptions, channel => {\n return _openBlock(), _createBlock(_component_el_radio, {\n key: channel.value,\n label: channel.value,\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: channel.value,\n class: \"channel-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(channel.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\"]), $data.channelVisibility === 'configured' && $options.visibleChannelOptions.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('uploadSettings.noConfiguredChannels')), 1)) : _createCommentVNode(\"\", true)]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [_createElementVNode(\"span\", _hoisted_28, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_29, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[14] || (_cache[14] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [_createElementVNode(\"span\", _hoisted_32, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[15] || (_cache[15] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [_createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"span\", _hoisted_37, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_38, [_createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"span\", _hoisted_40, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_41, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[12] || (_cache[12] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nconst CHANNEL_OPTIONS = [{\n value: 'telegram',\n label: 'TG'\n}, {\n value: 'cfr2',\n label: 'R2'\n}, {\n value: 's3',\n label: 'S3'\n}, {\n value: 'discord',\n label: 'DC'\n}, {\n value: 'huggingface',\n label: 'HF'\n}, {\n value: 'webdav',\n label: 'WD'\n}];\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n data() {\n return {\n channelVisibility: 'configured'\n };\n },\n methods: {\n hasConfiguredChannels(channelType) {\n const channels = this.availableChannels[channelType];\n return Array.isArray(channels) && channels.length > 0;\n },\n handleChannelVisibilityChange(visibility) {\n if (visibility !== 'configured') {\n return;\n }\n this.ensureConfiguredChannelSelected();\n },\n ensureConfiguredChannelSelected() {\n if (this.channelVisibility !== 'configured' || this.hasConfiguredChannels(this.uploadChannel)) {\n return;\n }\n const firstConfiguredChannel = this.visibleChannelOptions[0];\n if (firstConfiguredChannel) {\n this.$emit('update:uploadChannel', firstConfiguredChannel.value);\n }\n },\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n availableChannels: {\n type: Object,\n default: () => ({})\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n watch: {\n availableChannels: {\n handler() {\n this.ensureConfiguredChannelSelected();\n },\n deep: true\n }\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n visibleChannelOptions() {\n if (this.channelVisibility === 'all') {\n return CHANNEL_OPTIONS;\n }\n return CHANNEL_OPTIONS.filter(channel => this.hasConfiguredChannels(channel.value));\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=25aa00bd&scoped=true\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"./UploadSettingsDialog.vue?vue&type=style&index=1&id=25aa00bd&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25aa00bd\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=645a7810&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=645a7810&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-645a7810\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, withModifiers as _withModifiers, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n ref: \"clipboardPasteReceiver\",\n class: \"clipboard-paste-receiver\",\n tabindex: \"-1\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_3 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_4 = {\n class: \"upload-prompt-row\"\n};\nconst _hoisted_5 = [\"innerHTML\"];\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_8 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_9 = [\"aria-label\"];\nconst _hoisted_10 = [\"aria-pressed\"];\nconst _hoisted_11 = [\"aria-pressed\"];\nconst _hoisted_12 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_14 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_15 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_16 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"textarea\", _hoisted_2, null, 512), _createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[2] || (_cache[2] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[3] || (_cache[3] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args)),\n onDropCapture: _cache[4] || (_cache[4] = _withModifiers((...args) => $options.handleDrop && $options.handleDrop(...args), [\"stop\", \"prevent\"]))\n }, [_createElementVNode(\"div\", _hoisted_3, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [...(_cache[12] || (_cache[12] = [_createElementVNode(\"svg\", {\n class: \"upload-plus-icon\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"1.25\",\n \"stroke-linecap\": \"round\",\n \"aria-hidden\": \"true\"\n }, [_createElementVNode(\"path\", {\n d: \"M12 7v10\"\n }), _createElementVNode(\"path\", {\n d: \"M7 12h10\"\n })], -1)]))]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText', {\n pasteShortcut: $options.pasteShortcut\n })\n }, null, 10, _hoisted_5), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.selectFolderUpload'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n type: \"button\",\n class: _normalizeClass([\"folder-upload-icon-button\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n \"aria-label\": _ctx.$t('upload.selectFolderUpload'),\n onClick: _cache[0] || (_cache[0] = _withModifiers((...args) => $options.openFolderPicker && $options.openFolderPicker(...args), [\"stop\", \"prevent\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\"\n })], 10, _hoisted_6)]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"input\", {\n ref: \"folderInput\",\n class: \"folder-upload-input\",\n type: \"file\",\n webkitdirectory: \"\",\n directory: \"\",\n multiple: \"\",\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleFolderSelection && $options.handleFolderSelection(...args))\n }, null, 544)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"paste-card-method-group\", {\n 'is-external': $data.pasteUploadMethod === 'external'\n }]),\n role: \"group\",\n \"aria-label\": _ctx.$t('upload.switchUploadMethod')\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'save'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'save',\n onClick: _cache[6] || (_cache[6] = $event => $data.pasteUploadMethod = 'save')\n }, _toDisplayString(_ctx.$t('upload.pasteSave')), 11, _hoisted_10), _createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'external'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'external',\n onClick: _cache[7] || (_cache[7] = $event => $data.pasteUploadMethod = 'external')\n }, _toDisplayString(_ctx.$t('upload.pasteExternal')), 11, _hoisted_11)], 10, _hoisted_9)])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-copy\",\n onClick: _cache[8] || (_cache[8] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-retry\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.uid,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[11] || (_cache[11] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])])]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\r\n * URL 构建工具函数\r\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\r\n */\r\n\r\n/**\r\n * 根据 srcID 和文件名生成所有格式的 URL\r\n * @param {string} srcID - 文件资源 ID\r\n * @param {string} name - 文件名\r\n * @param {string} rootUrl - 链接前缀\r\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\r\n */\r\nexport function buildFileUrls(srcID, name, rootUrl) {\r\n const url = rootUrl + srcID\r\n return {\r\n finalURL: url,\r\n mdURL: `![${name}](${url})`,\r\n htmlURL: `\"${name}\"`,\r\n ubbURL: `[img]${url}[/img]`\r\n }\r\n}\r\n\r\n/**\r\n * 根据 selectedUrlForm 获取对应格式的 URL 值\r\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\r\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\r\n * @returns {string}\r\n */\r\nexport function getUrlByFormat(file, format) {\r\n const map = {\r\n url: file.finalURL,\r\n md: file.mdURL,\r\n html: file.htmlURL,\r\n ubb: file.ubbURL\r\n }\r\n return map[format] || file.finalURL\r\n}\r\n\r\n/**\r\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\r\n * @param {Array} fileList - 文件列表\r\n * @param {string} rootUrl - 新的链接前缀\r\n */\r\nexport function updateFileListUrls(fileList, rootUrl) {\r\n fileList.forEach(item => {\r\n if (item.uploadChannel === 'external') {\r\n return\r\n }\r\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\r\n Object.assign(item, urls)\r\n })\r\n}\r\n","/**\r\n * SHA256 计算工具\r\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\r\n */\r\n\r\n// SHA256 常量\r\nconst K = new Uint32Array([\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n])\r\n\r\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\r\n\r\nfunction processBlock(block, H) {\r\n const W = new Uint32Array(64)\r\n\r\n for (let i = 0; i < 16; i++) {\r\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\r\n }\r\n\r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\r\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\r\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\r\n }\r\n\r\n let [a, b, c, d, e, f, g, h] = H\r\n\r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\r\n const ch = (e & f) ^ (~e & g)\r\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\r\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\r\n const maj = (a & b) ^ (a & c) ^ (b & c)\r\n const temp2 = (S0 + maj) >>> 0\r\n\r\n h = g; g = f; f = e\r\n e = (d + temp1) >>> 0\r\n d = c; c = b; b = a\r\n a = (temp1 + temp2) >>> 0\r\n }\r\n\r\n H[0] = (H[0] + a) >>> 0\r\n H[1] = (H[1] + b) >>> 0\r\n H[2] = (H[2] + c) >>> 0\r\n H[3] = (H[3] + d) >>> 0\r\n H[4] = (H[4] + e) >>> 0\r\n H[5] = (H[5] + f) >>> 0\r\n H[6] = (H[6] + g) >>> 0\r\n H[7] = (H[7] + h) >>> 0\r\n}\r\n\r\n/**\r\n * 创建增量 SHA256 哈希器\r\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\r\n */\r\nexport function createSha256() {\r\n let H = new Uint32Array([\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ])\r\n\r\n let buffer = new Uint8Array(64)\r\n let bufferLength = 0\r\n let totalLength = 0\r\n\r\n return {\r\n update(data) {\r\n totalLength += data.length\r\n let offset = 0\r\n\r\n if (bufferLength > 0) {\r\n const needed = 64 - bufferLength\r\n const toCopy = Math.min(needed, data.length)\r\n buffer.set(data.subarray(0, toCopy), bufferLength)\r\n bufferLength += toCopy\r\n offset = toCopy\r\n\r\n if (bufferLength === 64) {\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n }\r\n\r\n while (offset + 64 <= data.length) {\r\n processBlock(data.subarray(offset, offset + 64), H)\r\n offset += 64\r\n }\r\n\r\n if (offset < data.length) {\r\n buffer.set(data.subarray(offset), 0)\r\n bufferLength = data.length - offset\r\n }\r\n },\r\n digest() {\r\n const bitLength = totalLength * 8\r\n\r\n // Padding\r\n buffer[bufferLength++] = 0x80\r\n\r\n if (bufferLength > 56) {\r\n buffer.fill(0, bufferLength, 64)\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n\r\n buffer.fill(0, bufferLength, 56)\r\n\r\n // Length in bits (big-endian, 64-bit)\r\n const view = new DataView(buffer.buffer)\r\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\r\n view.setUint32(60, bitLength >>> 0, false)\r\n\r\n processBlock(buffer, H)\r\n\r\n // Convert to hex\r\n let hex = ''\r\n for (let i = 0; i < 8; i++) {\r\n hex += H[i].toString(16).padStart(8, '0')\r\n }\r\n return hex\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 计算文件的 SHA256 哈希\r\n * 使用增量哈希算法,支持任意大小文件\r\n * @param {File} file - 要计算哈希的文件\r\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\r\n */\r\nexport async function computeSha256(file) {\r\n const sha256 = createSha256()\r\n\r\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\r\n let offset = 0\r\n\r\n while (offset < file.size) {\r\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\r\n const buffer = await chunk.arrayBuffer()\r\n sha256.update(new Uint8Array(buffer))\r\n offset += CHUNK_SIZE\r\n\r\n // 每处理 20MB 打印一次进度\r\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\r\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\r\n }\r\n }\r\n\r\n return sha256.digest()\r\n}\r\n","function normalizePath(path = '') {\r\n return String(path)\r\n .replace(/\\\\/g, '/')\r\n .split('/')\r\n .filter(segment => segment && segment !== '.')\r\n .map(segment => segment === '..' ? '_' : segment)\r\n .join('/')\r\n}\r\n\r\nexport function getRelativeDirectory(relativePath = '') {\r\n const normalizedPath = normalizePath(relativePath)\r\n const lastSlashIndex = normalizedPath.lastIndexOf('/')\r\n return lastSlashIndex === -1 ? '' : normalizedPath.slice(0, lastSlashIndex)\r\n}\r\n\r\nexport function joinUploadFolder(baseFolder = '', relativeDirectory = '') {\r\n const hasLeadingSlash = /^[\\\\/]/.test(String(baseFolder).trim())\r\n const joinedPath = [normalizePath(baseFolder), normalizePath(relativeDirectory)]\r\n .filter(Boolean)\r\n .join('/')\r\n\r\n if (!joinedPath) return ''\r\n return hasLeadingSlash ? `/${joinedPath}` : joinedPath\r\n}\r\n\r\nexport function filesToUploadEntries(files = []) {\r\n return Array.from(files).map(file => ({\r\n file,\r\n relativePath: normalizePath(file.webkitRelativePath || file.relativePath || file.name)\r\n }))\r\n}\r\n\r\nfunction readFileEntry(entry) {\r\n return new Promise((resolve, reject) => entry.file(resolve, reject))\r\n}\r\n\r\nasync function readAllDirectoryEntries(directoryEntry) {\r\n const reader = directoryEntry.createReader()\r\n const entries = []\r\n\r\n // Chromium may return directory entries in batches (commonly 100 at a time).\r\n while (true) {\r\n const batch = await new Promise((resolve, reject) => reader.readEntries(resolve, reject))\r\n if (!batch.length) break\r\n entries.push(...batch)\r\n }\r\n\r\n return entries\r\n}\r\n\r\nasync function collectFromEntry(entry, parentPath, result) {\r\n const relativePath = normalizePath([parentPath, entry.name].filter(Boolean).join('/'))\r\n\r\n if (entry.isFile) {\r\n const file = await readFileEntry(entry)\r\n result.push({ file, relativePath })\r\n return\r\n }\r\n\r\n if (entry.isDirectory) {\r\n const children = await readAllDirectoryEntries(entry)\r\n for (const child of children) {\r\n await collectFromEntry(child, relativePath, result)\r\n }\r\n }\r\n}\r\n\r\nasync function collectFromHandle(handle, parentPath, result) {\r\n const relativePath = normalizePath([parentPath, handle.name].filter(Boolean).join('/'))\r\n\r\n if (handle.kind === 'file') {\r\n result.push({ file: await handle.getFile(), relativePath })\r\n return\r\n }\r\n\r\n if (handle.kind === 'directory') {\r\n for await (const child of handle.values()) {\r\n await collectFromHandle(child, relativePath, result)\r\n }\r\n }\r\n}\r\n\r\nexport async function collectFilesFromDataTransferItems(items = []) {\r\n const fileItems = Array.from(items).filter(item => item.kind === 'file')\r\n const result = []\r\n\r\n // Resolve handles while still in the drop/paste event call chain when possible.\r\n const handles = await Promise.all(fileItems.map(async item => {\r\n if (typeof item.getAsFileSystemHandle !== 'function') return null\r\n try {\r\n return await item.getAsFileSystemHandle()\r\n } catch {\r\n return null\r\n }\r\n }))\r\n\r\n for (let index = 0; index < fileItems.length; index++) {\r\n const item = fileItems[index]\r\n const handle = handles[index]\r\n\r\n if (handle) {\r\n await collectFromHandle(handle, '', result)\r\n continue\r\n }\r\n\r\n const entry = typeof item.webkitGetAsEntry === 'function' ? item.webkitGetAsEntry() : null\r\n if (entry) {\r\n await collectFromEntry(entry, '', result)\r\n continue\r\n }\r\n\r\n const file = item.getAsFile?.()\r\n if (file) result.push(...filesToUploadEntries([file]))\r\n }\r\n\r\n return result\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport { collectFilesFromDataTransferItems, filesToUploadEntries, getRelativeDirectory, joinUploadFolder } from '@/utils/upload/directoryTraversal';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n localUidCounter: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map(),\n // 存储每个文件的 AbortController\n pasteFocusTarget: null\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n pasteShortcut() {\n const platform = navigator.userAgentData?.platform || navigator.platform || '';\n return /mac|iphone|ipad|ipod/i.test(platform) ? 'Cmd + V' : 'Ctrl + V';\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n document.addEventListener('keydown', this.handlePasteShortcut);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n document.removeEventListener('keydown', this.handlePasteShortcut);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n createLocalUid() {\n this.localUidCounter += 1;\n return `local-${Date.now()}-${this.localUidCounter}`;\n },\n applyUploadPath(file, relativePath = file.name) {\n const normalizedRelativePath = String(relativePath || file.name).replace(/\\\\/g, '/').replace(/^\\/+/, '');\n file.uploadRelativePath = normalizedRelativePath;\n file.uploadFolder = joinUploadFolder(this.uploadFolder, getRelativeDirectory(normalizedRelativePath));\n return file;\n },\n copyUploadPath(sourceFile, targetFile) {\n targetFile.uploadRelativePath = sourceFile.uploadRelativePath || sourceFile.name;\n targetFile.uploadFolder = sourceFile.uploadFolder ?? this.uploadFolder;\n return targetFile;\n },\n getFileUploadFolder(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n return fileItem?.uploadFolder ?? file.file.uploadFolder ?? this.uploadFolder;\n },\n createUploadRequest(file) {\n return {\n file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, uploadedFile) => this.handleSuccess(response, uploadedFile),\n onError: (error, uploadedFile) => this.handleError(error, uploadedFile)\n };\n },\n async uploadLocalEntries(entries) {\n await Promise.allSettled(entries.map(async ({\n file,\n relativePath\n }) => {\n file.uid = this.createLocalUid();\n this.applyUploadPath(file, relativePath);\n const processedFile = await this.beforeUpload(file);\n if (processedFile instanceof File) {\n this.uploadFile(this.createUploadRequest(processedFile));\n }\n }));\n },\n openFolderPicker() {\n this.$refs.folderInput?.click();\n },\n async handleFolderSelection(event) {\n const entries = filesToUploadEntries(event.target.files);\n event.target.value = '';\n await this.uploadLocalEntries(entries);\n },\n async handleDrop(event) {\n const dataTransfer = event.dataTransfer;\n if (!dataTransfer) return;\n const entries = dataTransfer.items?.length ? await collectFilesFromDataTransferItems(dataTransfer.items) : filesToUploadEntries(dataTransfer.files);\n if (entries.length) await this.uploadLocalEntries(entries);\n },\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n const targetUploadFolder = this.getFileUploadFolder(file);\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n const targetUploadFolder = this.getFileUploadFolder(file);\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.uploadRelativePath || file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n uploadFolder: file.uploadFolder ?? this.uploadFolder,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n this.copyUploadPath(processedFile, newFile);\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n pushFileToQueue(newFile, needServerCompress);\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n isEditablePasteTarget(target) {\n const element = target?.nodeType === Node.TEXT_NODE ? target.parentElement : target;\n if (!element) return false;\n const tagName = element.tagName;\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || element.isContentEditable || Boolean(element.closest?.('[contenteditable=\"true\"]'));\n },\n handlePasteShortcut(event) {\n const isPasteShortcut = (event.ctrlKey || event.metaKey) && !event.altKey && String(event.key).toLowerCase() === 'v';\n if (!isPasteShortcut || this.isEditablePasteTarget(event.target)) return;\n const receiver = this.$refs.clipboardPasteReceiver;\n if (!receiver) return;\n this.pasteFocusTarget = document.activeElement;\n receiver.value = '';\n try {\n receiver.focus({\n preventScroll: true\n });\n } catch {\n receiver.focus();\n }\n },\n releasePasteReceiver(target) {\n const receiver = this.$refs.clipboardPasteReceiver;\n if (!receiver || target !== receiver) return;\n receiver.value = '';\n const focusTarget = this.pasteFocusTarget;\n this.pasteFocusTarget = null;\n setTimeout(() => {\n if (focusTarget?.isConnected && typeof focusTarget.focus === 'function') {\n try {\n focusTarget.focus({\n preventScroll: true\n });\n } catch {\n focusTarget.focus();\n }\n } else {\n receiver.blur();\n }\n if (document.activeElement === receiver) receiver.blur();\n }, 0);\n },\n async handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n const isPasteReceiver = event.target === this.$refs.clipboardPasteReceiver;\n if (!isPasteReceiver && this.isEditablePasteTarget(event.target)) {\n return;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n this.releasePasteReceiver(event.target);\n return;\n }\n const items = Array.from(clipboardData.items || []);\n const fileItems = items.filter(item => item.kind === 'file');\n const stringItems = items.filter(item => item.kind === 'string');\n const fileEntries = filesToUploadEntries(clipboardData.files || []);\n if (isPasteReceiver) event.preventDefault();\n this.releasePasteReceiver(event.target);\n if (fileEntries.length > 0 || fileItems.length > 0) {\n event.preventDefault();\n let entries = [];\n if (fileItems.length) {\n try {\n entries = await collectFilesFromDataTransferItems(fileItems);\n } catch (error) {\n console.warn('Failed to parse clipboard items, falling back to clipboard files:', error);\n }\n }\n // Safari may expose file items without supporting their entry APIs.\n if (!entries.length) entries = fileEntries;\n if (entries.length) await this.uploadLocalEntries(entries);\n }\n if (stringItems.length > 0) this.uploadFromUrl(stringItems);\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const targetUploadFolder = this.getFileUploadFolder(file);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: targetUploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n this.copyUploadPath(file, webpFile);\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=0fa6b946&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=0fa6b946&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0fa6b946\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=28b8eda7&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=28b8eda7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28b8eda7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"quick-toolbar-actions\"\n};\nconst _hoisted_4 = {\n class: \"quick-toolbar-actions-inner\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"title-crayon-text\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_8 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_9 = {\n class: \"dialog-section\"\n};\nconst _hoisted_10 = {\n class: \"section-header\"\n};\nconst _hoisted_11 = {\n class: \"section-title\"\n};\nconst _hoisted_12 = {\n class: \"section-content\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"setting-item\"\n};\nconst _hoisted_18 = {\n class: \"setting-label\"\n};\nconst _hoisted_19 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n class: \"setting-label\"\n};\nconst _hoisted_21 = {\n class: \"dialog-action\"\n};\nconst _hoisted_22 = [\"innerHTML\"];\nconst _hoisted_23 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quick-toolbar\", {\n 'is-expanded': $data.isQuickToolbarOpen\n }]),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleQuickToolbarLeave && $options.handleQuickToolbarLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.logout'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleQuickToolbarCommand('logout'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.manage'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleQuickToolbarCommand('manage'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleQuickToolbarCommand('linkFormat'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: $options.openCompressDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_button, {\n class: _normalizeClass([\"quick-toolbar-button quick-toolbar-more\", {\n 'is-active': $data.isQuickToolbarOpen\n }]),\n \"aria-expanded\": $data.isQuickToolbarOpen,\n onMouseenter: $options.handleQuickToolbarMoreEnter,\n onClick: $options.toggleQuickToolbar\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"quick-toolbar-icon quick-toolbar-toggle-icon\"\n })]),\n _: 1\n }, 8, [\"class\", \"aria-expanded\", \"onMouseenter\", \"onClick\"])], 34), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString($options.ownerName) + \" ImgHub\", 1), _createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[24] || (_cache[24] = _createTextVNode(\" ImgHub \", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_21, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[9] || (_cache[9] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[12] || (_cache[12] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[13] || (_cache[13] = $event => $data.channelName = $event),\n availableChannels: $data.availableChannels,\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[14] || (_cache[14] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[15] || (_cache[15] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[16] || (_cache[16] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[17] || (_cache[17] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[18] || (_cache[18] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[19] || (_cache[19] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[20] || (_cache[20] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[21] || (_cache[21] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"availableChannels\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_23, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.acknowledgeAnnouncement\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_22)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[23] || (_cache[23] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n isQuickToolbarOpen: false,\n isQuickToolbarPinned: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n displayedAnnouncementRefreshAt: null,\n // 当前弹窗所展示的公告版本\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', true, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n this.showAnnouncementIfNeeded();\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleQuickToolbarMoreEnter() {\n this.isQuickToolbarOpen = true;\n },\n handleQuickToolbarLeave() {\n if (!this.isQuickToolbarPinned) {\n this.isQuickToolbarOpen = false;\n }\n },\n toggleQuickToolbar() {\n this.isQuickToolbarPinned = !this.isQuickToolbarPinned;\n this.isQuickToolbarOpen = this.isQuickToolbarPinned;\n },\n closeQuickToolbar() {\n this.isQuickToolbarPinned = false;\n this.isQuickToolbarOpen = false;\n },\n handleQuickToolbarCommand(command) {\n this.closeQuickToolbar();\n if (command === 'linkFormat') {\n this.openUrlDialog();\n } else if (command === 'manage') {\n this.handleManage();\n } else if (command === 'logout') {\n this.handleLogout();\n }\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.openAnnouncement(announcement);\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n getAnnouncementRefreshAt() {\n const refreshAt = Number(this.userConfig?.announcementRefreshAt);\n return Number.isFinite(refreshAt) && refreshAt > 0 ? refreshAt : null;\n },\n openAnnouncement(announcement) {\n this.announcementContent = announcement;\n this.displayedAnnouncementRefreshAt = this.getAnnouncementRefreshAt();\n this.showAnnouncementDialog = true;\n },\n showAnnouncementIfNeeded() {\n const announcement = this.userConfig?.announcement;\n if (!announcement) return;\n const refreshAt = this.getAnnouncementRefreshAt();\n if (refreshAt) {\n const acknowledgedRefreshAt = Number(localStorage.getItem('announcementAcknowledgedRefreshAt'));\n if (!Number.isFinite(acknowledgedRefreshAt) || refreshAt > acknowledgedRefreshAt) {\n this.openAnnouncement(announcement);\n }\n return;\n }\n\n // 尚未产生刷新时间的旧公告在升级后再展示一次,确认后使用新版时间标记。\n if (!localStorage.getItem('announcementAcknowledgedAt')) {\n this.openAnnouncement(announcement);\n }\n },\n acknowledgeAnnouncement() {\n localStorage.setItem('announcementAcknowledgedAt', String(Date.now()));\n if (this.displayedAnnouncementRefreshAt) {\n localStorage.setItem('announcementAcknowledgedRefreshAt', String(this.displayedAnnouncementRefreshAt));\n }\n this.showAnnouncementDialog = false;\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=15adb2dc&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=15adb2dc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-15adb2dc\"]])\n\nexport default __exports__","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\nimport i18n from '@/locales'\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path, { strict = true } = {}) {\r\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\r\n if (!path || path.trim() === '') {\r\n return { valid: true };\r\n }\r\n \r\n // 如果路径仅为 \"/\",返回有效(表示根目录)\r\n if (path === '/') {\r\n return { valid: true };\r\n }\r\n \r\n // 检查路径是否以 \"/\" 开头\r\n if (!path.startsWith('/')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.pathMustStartWithSlash') \r\n };\r\n }\r\n\r\n // 检查路径穿越:包含 .. 的路径段\r\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.pathTraversalNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径中单独的 . 段\r\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\r\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\r\n if (dotPattern.test(path)) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.singleDotNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \r\n };\r\n }\r\n \r\n // 检查路径是否包含非法字符\r\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"page-footer\"\n};\nconst _hoisted_2 = [\"href\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return !$options.disableFooter ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"p\", null, [_createTextVNode(\"© 2024-\" + _toDisplayString($options.thisYear) + \" Designed by \", 1), _cache[0] || (_cache[0] = _createElementVNode(\"a\", {\n class: \"footer-name\",\n href: \"https://github.com/MarSeventh\",\n target: \"_blank\"\n }, \"SanyueQi\", -1)), _cache[1] || (_cache[1] = _createTextVNode(\" for You! \", -1)), _createElementVNode(\"a\", {\n href: $options.footerLink,\n target: \"_blank\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"footer-link-icon\"\n })], 8, _hoisted_2)])])) : _createCommentVNode(\"\", true);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Footer',\n computed: {\n ...mapGetters(['userConfig']),\n footerLink() {\n return this.userConfig?.footerLink || 'https://github.com/MarSeventh';\n },\n thisYear() {\n return new Date().getFullYear();\n },\n disableFooter() {\n return this.userConfig?.disableFooter || false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Footer.vue?vue&type=template&id=08acbaa9&scoped=true\"\nimport script from \"./Footer.vue?vue&type=script&lang=js\"\nexport * from \"./Footer.vue?vue&type=script&lang=js\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=08acbaa9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08acbaa9\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__"],"names":["_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","href","logoHref","target","class","logo","link","logoClasses","alt","src","logoUrl","name","props","type","String","default","validator","value","includes","customSrc","position","size","enableHover","Boolean","useConfigLink","computed","this","userConfig","logoLink","__exports__","t","e","module","exports","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","__esModule","create","bind","prototype","hasOwnProperty","p","s","some","a","f","g","w","b","PNG","JPEG","GIF","Promise","u","next","throw","done","then","apply","toDataURL","toBlob","split","match","atob","length","Uint8Array","charCodeAt","Blob","Image","onload","onerror","Error","document","createElement","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","accuracy","filter","sort","abs","pow","v","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_font_awesome_icon","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","trigger","transition","reference","onClick","$slots","undefined","error","icon","fetchDirectoryTree","$t","_","ref","data","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","loading","args","openDrawer","modelValue","drawerVisible","direction","title","source","children","label","windowWidth","innerWidth","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","axios","withAuthCode","tree","err","console","startsWith","$emit","id","handleToggleClick","mode","isAuto","style","isDark","viewBox","fill","stroke","x","cx","cy","mask","opacity","x1","y1","x2","y2","$store","getters","useDarkMode","cusDarkMode","commit","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_component_el_tooltip","show","count","totalCount","content","circle","toggleViewMode","viewMode","clearHistory","historyList","onScroll","handleScroll","groupedHistory","group","date","items","item","time","isImage","url","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","formatTime","hasMore","loadingMore","spin","allHistory","pageSize","currentPage","val","resetAndLoad","groups","forEach","dateStr","getFullYear","getMonth","padStart","getDate","push","keys","map","savedMode","localStorage","getItem","loadAllHistory","loadMore","history","JSON","parse","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","removeItem","$message","success","catch","stringify","fileName","imageExtensions","extension","pop","toLowerCase","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","open","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_component_el_radio_button","_component_el_radio_group","_component_ChannelIcon","_component_el_radio","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","dialogWidth","channelVisibility","onChange","handleChannelVisibilityChange","uploadChannel","visibleChannelOptions","channel","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","CHANNEL_OPTIONS","components","ChannelIcon","hasConfiguredChannels","channelType","channels","availableChannels","Array","isArray","visibility","ensureConfiguredChannelSelected","firstConfiguredChannel","emits","handler","deep","set","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","required","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","tabindex","_component_el_upload","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","onDropCapture","handleDrop","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","innerHTML","pasteShortcut","disabled","disableTooltip","openFolderPicker","webkitdirectory","directory","handleFolderSelection","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","role","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","copyAll","dropdown","autoReUpload","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","uid","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","K","Uint32Array","rotr","processBlock","block","H","W","s0","s1","S1","temp1","S0","maj","temp2","createSha256","buffer","bufferLength","totalLength","update","offset","needed","toCopy","subarray","digest","bitLength","view","DataView","setUint32","floor","hex","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","normalizePath","replace","segment","join","getRelativeDirectory","relativePath","normalizedPath","lastSlashIndex","joinUploadFolder","baseFolder","relativeDirectory","hasLeadingSlash","test","trim","joinedPath","filesToUploadEntries","files","from","webkitRelativePath","readFileEntry","entry","resolve","reject","readAllDirectoryEntries","directoryEntry","reader","createReader","entries","batch","readEntries","collectFromEntry","parentPath","isFile","isDirectory","child","collectFromHandle","handle","kind","values","getFile","collectFilesFromDataTransferItems","fileItems","handles","all","getAsFileSystemHandle","index","webkitGetAsEntry","getAsFile","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","localUidCounter","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","pasteFocusTarget","scrollContainer","setScrollTop","immediate","platform","userAgentData","location","protocol","host","handlePaste","handlePasteShortcut","storeAutoReUpload","createLocalUid","applyUploadPath","normalizedRelativePath","uploadRelativePath","copyUploadPath","sourceFile","targetFile","getFileUploadFolder","fileItem","find","createUploadRequest","onProgress","evt","uploadedFile","uploadLocalEntries","allSettled","processedFile","File","folderInput","click","dataTransfer","waitingItem","uploadingItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","targetUploadFolder","abortController","AbortController","formData","FormData","append","encodeURIComponent","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","percent","res","code","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","pool","currentIndex","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","saveToHistory","newRecord","scheduleAutoRetry","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","newFile","controller","clear","isEditablePasteTarget","element","nodeType","Node","TEXT_NODE","parentElement","tagName","isContentEditable","closest","isPasteShortcut","ctrlKey","metaKey","altKey","receiver","clipboardPasteReceiver","activeElement","focus","preventScroll","releasePasteReceiver","focusTarget","isConnected","blur","isPasteReceiver","clipboardData","stringItems","fileEntries","preventDefault","uploadFromUrl","validUrls","getAsString","callback","mdUrl","htmlUrl","ubbUrl","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","checkResult","retryFailedFiles","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","etag","partNumber","progress","completeResponse","oid","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","normalizeDirectoryPath","inputRef","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","acknowledgeAnnouncement","announcementContent","showHistory","onClose","mixins","backgroundManager","useDefaultWallPaper","isQuickToolbarPinned","displayedAnnouncementRefreshAt","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","strictResult","strict","valid","storeUploadFolder","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","showAnnouncementIfNeeded","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","handleManage","$router","defaultValue","num","parseFloat","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","openAnnouncement","info","getAnnouncementRefreshAt","refreshAt","announcementRefreshAt","isFinite","acknowledgedRefreshAt","validateFolderPath","i18n","global","dotPattern","invalidChars","isRedirecting","options","credentials","router","disableFooter","thisYear","footerLink","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","cfr2","s3","discord"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/437.fa57fedd.js.map.gz b/frontend-dist/js/437.fa57fedd.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..50257708cf1f5afd7f3b9e293cca2c4017e38a40 GIT binary patch literal 84999 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.handleToggleClick&&g.handleToggleClick(...e))},[(0,a.bF)(o.eB,{name:"icon-fade",mode:"out-in"},{default:(0,a.k6)(()=>[u.isAuto?((0,a.uX)(),(0,a.Wv)(d,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.3em",color:"var(--admin-theme-toggle-color)"}})):((0,a.uX)(),(0,a.CE)("svg",{key:"sun-moon",class:(0,s.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.3em",height:"1.3em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,a.Lk)("mask",c,[t[1]||(t[1]=(0,a.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,a.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,l)]),(0,a.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMaskAdmin)"},null,8,r),(0,a.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},[...t[2]||(t[2]=[(0,a.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,a.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,a.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,h)],2))]),_:1})])}var g={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},d=n(71241);const p=(0,d.A)(g,[["render",u],["__scopeId","data-v-5c149ed5"]]);var m=p;const k={class:"tabs"},v=["aria-expanded"],b={class:"page-switcher-title"},f=["onMouseenter","onClick"],P={class:"page-switcher-title"};function C(e,t,n,c,l,r){const h=(0,a.g2)("font-awesome-icon"),u=m,g=i.A;return(0,a.uX)(),(0,a.CE)("div",k,[(0,a.Lk)("div",{class:(0,s.C4)(["page-switcher",{"is-open":l.isPageMenuOpen}]),role:"navigation",onClick:t[3]||(t[3]=(0,o.D$)(()=>{},["stop"])),onPointerdown:t[4]||(t[4]=(0,o.D$)(()=>{},["stop"])),onMouseenter:t[5]||(t[5]=(...e)=>r.handlePageSwitcherEnter&&r.handlePageSwitcherEnter(...e)),onMouseleave:t[6]||(t[6]=(...e)=>r.handlePageSwitcherLeave&&r.handlePageSwitcherLeave(...e))},[(0,a.Lk)("div",{class:"page-switcher-sheet",role:"menu",onClick:t[2]||(t[2]=(0,o.D$)(()=>{},["stop"]))},[(0,a.Lk)("button",{class:"page-option is-current",type:"button",role:"menuitem","aria-current":"page","aria-expanded":l.isPageMenuOpen,onClick:t[0]||(t[0]=(0,o.D$)(e=>r.handlePageOptionClick(r.activePageOption.name),["stop"]))},[(0,a.bF)(h,{icon:r.activePageOption.icon,class:"page-option-icon"},null,8,["icon"]),(0,a.Lk)("span",b,(0,s.v_)(e.$t(r.activePageOption.label)),1),(0,a.bF)(h,{icon:"chevron-down",class:"page-switcher-arrow"})],8,v),(0,a.Lk)("div",{class:"page-option-list",onMouseleave:t[1]||(t[1]=(...e)=>r.clearHoveredPageOption&&r.clearHoveredPageOption(...e))},[(0,a.Lk)("span",{class:(0,s.C4)(["page-option-highlight",{"is-visible":l.isPageOptionHighlightVisible}]),style:(0,s.Tr)({"--hovered-option-index":l.hoveredPageOptionIndex}),"aria-hidden":"true"},null,6),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(r.inactivePageOptions,(t,n)=>((0,a.uX)(),(0,a.CE)("button",{key:t.name,class:"page-option",type:"button",role:"menuitem",onMouseenter:e=>r.setHoveredPageOption(n),onClick:(0,o.D$)(e=>r.handlePageOptionClick(t.name),["stop"])},[(0,a.bF)(h,{icon:t.icon,class:"page-option-icon"},null,8,["icon"]),(0,a.Lk)("span",P,(0,s.v_)(e.$t(t.label)),1)],40,f))),128))],32)])],34),(0,a.bF)(u),(0,a.bF)(g,{class:"tabs-language-switcher"})])}n(44114),n(18111),n(22489),n(20116);var w={name:"DashboardTabs",props:{activeTab:{type:String,default:"dashboard"}},components:{AdminToggleDark:m,LanguageSwitcher:i.A},data(){return{isPageMenuOpen:!1,hoveredPageOptionIndex:0,isPageOptionHighlightVisible:!1}},computed:{pageOptions(){return[{name:"dashboard",icon:"images",label:"dashboardTabs.fileManagement"},{name:"customerConfig",icon:"user-cog",label:"dashboardTabs.userManagement"},{name:"systemConfig",icon:"cogs",label:"dashboardTabs.systemSettings"},{name:"",icon:"upload",label:"dashboardTabs.fileUpload"}]},activePageOption(){return this.pageOptions.find(e=>e.name===this.activeTab)||this.pageOptions[0]},inactivePageOptions(){return this.pageOptions.filter(e=>e.name!==this.activePageOption.name)}},methods:{handleDocumentClick(e){this.$el?.contains(e.target)||this.closePageMenu()},refreshDashboard(){location.reload()},handleTabClick(e){this.closePageMenu(),e!==this.activeTab?this.$router.push(`/${e}`):this.refreshDashboard()},isTouchViewport(){return window.matchMedia("(hover: none), (pointer: coarse)").matches},handlePageOptionClick(e){!this.isTouchViewport()||this.isPageMenuOpen||e===this.activeTab?e!==this.activeTab?this.handleTabClick(e):this.isTouchViewport()?this.togglePageMenu():this.openPageMenu():this.openPageMenu()},handlePageSwitcherEnter(){this.isTouchViewport()||this.openPageMenu()},handlePageSwitcherLeave(){this.isTouchViewport()||this.closePageMenu()},setHoveredPageOption(e){this.hoveredPageOptionIndex=e,this.isPageOptionHighlightVisible=!0},clearHoveredPageOption(){this.isPageOptionHighlightVisible=!1},openPageMenu(){this.isPageMenuOpen=!0},togglePageMenu(){this.isPageMenuOpen=!this.isPageMenuOpen},closePageMenu(){this.isPageMenuOpen=!1,this.clearHoveredPageOption()}},mounted(){document.addEventListener("click",this.handleDocumentClick)},beforeUnmount(){document.removeEventListener("click",this.handleDocumentClick)}};const y=(0,d.A)(w,[["render",C],["__scopeId","data-v-2fe4fd26"]]);var M=y},30694:function(e,t,n){n(85331)},38736:function(e,t,n){n(85331)},54047:function(e,t,n){n.d(t,{A:function(){return h}});var i=n(56768);const a=["title"];function o(e,t,n,o,s,c){const l=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("span",{class:"language-switcher",onClick:t[0]||(t[0]=(...e)=>c.toggleLocale&&c.toggleLocale(...e)),role:"button",title:e.$t("language.switchTo")},[(0,i.bF)(l,{icon:"globe",class:"lang-icon"})],8,a)}var s=n(46638),c={name:"LanguageSwitcher",computed:{isZh(){return"zh-CN"===this.$i18n.locale}},methods:{toggleLocale(){const e=this.isZh?"en":"zh-CN";(0,s.xS)(e)}}},l=n(71241);const r=(0,l.A)(c,[["render",o],["__scopeId","data-v-08567d0a"]]);var h=r},67819:function(e,t,n){n(85331)},70797:function(e,t,n){n.d(t,{A:function(){return s}});n(44114);var i=n(25507),a=n(16915);let o=!1;async function s(e,t={}){t.credentials="include",t.headers={...t.headers};const n=await fetch(e,t);return 401!==n.status||o||(o=!0,i.A.commit("setAdminLoggedIn",!1),a.A.push("/adminLogin").finally(()=>{o=!1})),n}},77128:function(e,t,n){n(85331),n(4318)},78450:function(e,t,n){n(85331)},85970:function(e,t,n){n(85331)},96808:function(e,t,n){n(85331),n(18785),n(67819),n(85970),n(19104)}}]); +//# sourceMappingURL=540.8854b4d5.js.map \ No newline at end of file diff --git a/frontend-dist/js/540.8854b4d5.js.gz b/frontend-dist/js/540.8854b4d5.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..fd649b9fabf2c8f015729c51347ceab321ebb7fc GIT binary patch literal 2779 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 $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMaskAdmin)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.3em\",\n \"color\": \"var(--admin-theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminToggleDark.vue?vue&type=template&id=5c149ed5&scoped=true\"\nimport script from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./AdminToggleDark.vue?vue&type=style&index=0&id=5c149ed5&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5c149ed5\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tabs\"\n};\nconst _hoisted_2 = [\"aria-expanded\"];\nconst _hoisted_3 = {\n class: \"page-switcher-title\"\n};\nconst _hoisted_4 = [\"onMouseenter\", \"onClick\"];\nconst _hoisted_5 = {\n class: \"page-switcher-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_AdminToggleDark = _resolveComponent(\"AdminToggleDark\");\n const _component_LanguageSwitcher = _resolveComponent(\"LanguageSwitcher\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"page-switcher\", {\n 'is-open': $data.isPageMenuOpen\n }]),\n role: \"navigation\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"stop\"])),\n onPointerdown: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"stop\"])),\n onMouseenter: _cache[5] || (_cache[5] = (...args) => $options.handlePageSwitcherEnter && $options.handlePageSwitcherEnter(...args)),\n onMouseleave: _cache[6] || (_cache[6] = (...args) => $options.handlePageSwitcherLeave && $options.handlePageSwitcherLeave(...args))\n }, [_createElementVNode(\"div\", {\n class: \"page-switcher-sheet\",\n role: \"menu\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"button\", {\n class: \"page-option is-current\",\n type: \"button\",\n role: \"menuitem\",\n \"aria-current\": \"page\",\n \"aria-expanded\": $data.isPageMenuOpen,\n onClick: _cache[0] || (_cache[0] = _withModifiers($event => $options.handlePageOptionClick($options.activePageOption.name), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.activePageOption.icon,\n class: \"page-option-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t($options.activePageOption.label)), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"page-switcher-arrow\"\n })], 8, _hoisted_2), _createElementVNode(\"div\", {\n class: \"page-option-list\",\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.clearHoveredPageOption && $options.clearHoveredPageOption(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"page-option-highlight\", {\n 'is-visible': $data.isPageOptionHighlightVisible\n }]),\n style: _normalizeStyle({\n '--hovered-option-index': $data.hoveredPageOptionIndex\n }),\n \"aria-hidden\": \"true\"\n }, null, 6), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.inactivePageOptions, (option, index) => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: option.name,\n class: \"page-option\",\n type: \"button\",\n role: \"menuitem\",\n onMouseenter: $event => $options.setHoveredPageOption(index),\n onClick: _withModifiers($event => $options.handlePageOptionClick(option.name), [\"stop\"])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: option.icon,\n class: \"page-option-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(option.label)), 1)], 40, _hoisted_4);\n }), 128))], 32)])], 34), _createVNode(_component_AdminToggleDark), _createVNode(_component_LanguageSwitcher, {\n class: \"tabs-language-switcher\"\n })]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport AdminToggleDark from './dashboard/AdminToggleDark.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nexport default {\n name: 'DashboardTabs',\n props: {\n activeTab: {\n type: String,\n default: 'dashboard'\n }\n },\n components: {\n AdminToggleDark,\n LanguageSwitcher\n },\n data() {\n return {\n isPageMenuOpen: false,\n hoveredPageOptionIndex: 0,\n isPageOptionHighlightVisible: false\n };\n },\n computed: {\n pageOptions() {\n return [{\n name: 'dashboard',\n icon: 'images',\n label: 'dashboardTabs.fileManagement'\n }, {\n name: 'customerConfig',\n icon: 'user-cog',\n label: 'dashboardTabs.userManagement'\n }, {\n name: 'systemConfig',\n icon: 'cogs',\n label: 'dashboardTabs.systemSettings'\n }, {\n name: '',\n icon: 'upload',\n label: 'dashboardTabs.fileUpload'\n }];\n },\n activePageOption() {\n return this.pageOptions.find(option => option.name === this.activeTab) || this.pageOptions[0];\n },\n inactivePageOptions() {\n return this.pageOptions.filter(option => option.name !== this.activePageOption.name);\n }\n },\n methods: {\n handleDocumentClick(event) {\n if (this.$el?.contains(event.target)) {\n return;\n }\n this.closePageMenu();\n },\n refreshDashboard() {\n location.reload();\n },\n handleTabClick(tab) {\n this.closePageMenu();\n if (tab === this.activeTab) {\n this.refreshDashboard();\n return;\n }\n this.$router.push(`/${tab}`);\n },\n isTouchViewport() {\n return window.matchMedia('(hover: none), (pointer: coarse)').matches;\n },\n handlePageOptionClick(tab) {\n if (this.isTouchViewport() && !this.isPageMenuOpen && tab !== this.activeTab) {\n this.openPageMenu();\n return;\n }\n if (tab === this.activeTab) {\n if (this.isTouchViewport()) {\n this.togglePageMenu();\n } else {\n this.openPageMenu();\n }\n return;\n }\n this.handleTabClick(tab);\n },\n handlePageSwitcherEnter() {\n if (!this.isTouchViewport()) {\n this.openPageMenu();\n }\n },\n handlePageSwitcherLeave() {\n if (!this.isTouchViewport()) {\n this.closePageMenu();\n }\n },\n setHoveredPageOption(index) {\n this.hoveredPageOptionIndex = index;\n this.isPageOptionHighlightVisible = true;\n },\n clearHoveredPageOption() {\n this.isPageOptionHighlightVisible = false;\n },\n openPageMenu() {\n this.isPageMenuOpen = true;\n },\n togglePageMenu() {\n this.isPageMenuOpen = !this.isPageMenuOpen;\n },\n closePageMenu() {\n this.isPageMenuOpen = false;\n this.clearHoveredPageOption();\n }\n },\n mounted() {\n document.addEventListener('click', this.handleDocumentClick);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardTabs.vue?vue&type=template&id=2fe4fd26&scoped=true\"\nimport script from \"./DashboardTabs.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardTabs.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardTabs.vue?vue&type=style&index=0&id=2fe4fd26&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2fe4fd26\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"title\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: \"language-switcher\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleLocale && $options.toggleLocale(...args)),\n role: \"button\",\n title: _ctx.$t('language.switchTo')\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n class: \"lang-icon\"\n })], 8, _hoisted_1);\n}","import { setLocale } from '@/locales';\nexport default {\n name: 'LanguageSwitcher',\n computed: {\n isZh() {\n return this.$i18n.locale === 'zh-CN';\n }\n },\n methods: {\n toggleLocale() {\n const next = this.isZh ? 'en' : 'zh-CN';\n setLocale(next);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./LanguageSwitcher.vue?vue&type=template&id=08567d0a&scoped=true\"\nimport script from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\nexport * from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\n\nimport \"./LanguageSwitcher.vue?vue&type=style&index=0&id=08567d0a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08567d0a\"]])\n\nexport default __exports__","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","onClick","args","handleToggleClick","name","mode","default","isAuto","key","icon","class","style","isDark","width","height","viewBox","fill","stroke","x","y","cx","cy","r","mask","opacity","x1","y1","x2","y2","_","data","this","$store","getters","useDarkMode","cusDarkMode","methods","commit","__exports__","_hoisted_5","_component_AdminToggleDark","_component_LanguageSwitcher","isPageMenuOpen","role","onPointerdown","onMouseenter","handlePageSwitcherEnter","onMouseleave","handlePageSwitcherLeave","type","$event","handlePageOptionClick","activePageOption","$t","label","clearHoveredPageOption","isPageOptionHighlightVisible","hoveredPageOptionIndex","inactivePageOptions","option","index","setHoveredPageOption","props","activeTab","String","components","AdminToggleDark","LanguageSwitcher","computed","pageOptions","find","filter","handleDocumentClick","event","$el","contains","target","closePageMenu","refreshDashboard","location","reload","handleTabClick","tab","$router","push","isTouchViewport","window","matchMedia","matches","togglePageMenu","openPageMenu","mounted","document","addEventListener","beforeUnmount","removeEventListener","toggleLocale","title","isZh","$i18n","locale","next","isRedirecting","async","fetchWithAuth","url","options","credentials","headers","response","fetch","status","store","router","finally"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/540.8854b4d5.js.map.gz b/frontend-dist/js/540.8854b4d5.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..0bbb290c14ba27a30a5499942b7deda0c6825eed GIT binary patch literal 6765 zcmV-z8j|H7iwFP!000023f(;Ya~sEX|H}EI2!MS62=JR4#@$Cz|BNZgKlxwiytjMb2NIN& zG!u_Z;&$J@?|tv>+XElTN6ht1$Cl^D6?xyZm^>#Rc-6^?vC7QMg6UpR4$DBlEKj^k}Vtd?4+&RAqyZLsfaG5_;57+Jv-~Z9;Syc2odt1FN(2 z4rf&-^qspfxw(cIfy*}GA6tYhD@%kdwc+RHB8+Y>DLs{thw3}x=^;KfK#uVij8VX* z0UlJ!q}t??-z9WSXkv@d6_{&KloZJWiB(WR^CpVCsce#Zb1P(CTZiEp6&2mu0PtnN zxgv0az-yEXc$d(18p^t&+y!1XK(VVp>6ns(g()>pF9!>Y9P>7zD^0Gx4MI99Hx7vI zAPY4lyKxVB)s-#M?5cv~22yVmvH>4&QZC+ILT?FH+k~zu46!Z|+Eo=(MVoC9YN_Bn zq=yf-D$sOPLf1pxIx3D%t1xmG8Ea>3heAZaTx$bd(gLcBH2S#4`EEyiw+X!|%(e*% zTou>@l$(TX0m^YI)((I};o=*Ft}UT=`KnM)8#J&gFpsO7ID3?x1t(Iskh7D-?2_0! zM=GZQ5I&lXrC2&@1m;AZwz!)w6Z#H~e;h($iO>^uo6|T}LG+MZmjZ|;$f15Iq1{GL zkTZc?o9mAedJ`RIvzDOI1O{3lBqBIa^Y>iJ(m-drF{5TgSxQS4d|c!#!QM^bIiZU~ zG?M^ZE#z<&35({!ZZjOW|Um;6Z73%ftW+PWOn^)CMdzhL88r($StbKG= zU0EfYHhn1e`Z8&*E0p>z0*IRLiM^yjI9eivjDd&IW)wIr&P@*imoYZ9(J?nD#Is3t z9MjF_aTcJd+$GHeAWVsffE0olggSBnj5k*&__7l~(p(ovY>pBZ8od~R7)p>@<^lSU zhtC$FE?pZsy#(8CEuzuhzZ&{wvKFAv;qfIHYLV6VsIsJN)4uvnl)~$%^bUrG4W4%J z2V}}=gb<^5A^Ja5N%Or0WrN=2)kv%uG1VX+H5X$A2E-{N21deYnE>PYX`9elbxMta zPe;+Uxxmvm1g@_73Wdr+;~2q^5S`}r(F~fbPxEUSOntF98ThQfP*pQ&yQ30fV%k2U z$`&EpJZ(=k)( zDyJ$qMwJH7b$p(LT~4PLrzqmNy1_qtkmt-;DRU*2 zZ4)}#h~p3Pc9$}a{}k{KXjpx$t?`fBQPtGOs)<{5ng+IHP#(N@DKmoxXl2XhvO5hB zhKQIlONN*&%=i{f5{jA(?1u4VACZQ!~sI9Z10RbH!-yEV>xy#Zz-4>?Cc@LDCb+KNY?z+Vp< z{RTQ!kL&6PCBC=Hm8lQ+;U>zr9CyN*MtF>B5$ZR_8{xT#nfdOz5fF`>bc@hx^Fk** zfRN6b4rbQC*N^_cjBt{O6ZfzVX;(g1&0Z&?D_W73;>$K=&uDqA5Idjs_@AP zl{D`tR5_+}wn4BW5$wS+Xl<+!)h9fd!^d0P+>8gL2Iod6t-X2!j0dMAdYdN#203OQ z^C0-rGHF^^jT4uq%AdOkkC~WuRR$@K9OKi8+E8XxRBsc#4$7Rnp>Ny-nk0!1(>Pr_ zh@FO)BmbBZ#^?YH9*xmRWEInO0J(i3B#Qvs7Xr5OX>-McBq%po;QYhBb9s^D@uCC$ zdKnuCTO{y9IN#JcSO>xME{!k3%)Y?U!!erNiO`QH(DSi-L(xA}qY%9eM|LPC7dr7O z6A3t2I62sqp$0#&FW0H4$6$jkVC-lqo1`@jZVfXtm`K)Rdf;}XqA9aMs8EtlL~X_p zV$W^_2*6Pr7%ex%UFtc3oDbQTbvLhJOB%A1!eX& z_`U-oQW&Du1_y^w0?te!PP`?03<9y&K;3w%&!4wZ#6$I%X1T4x(KbE05z27b0LD=E zbt6K52x&xMAH$T@T&eNLI;>b<9}k~&a#x55TZ>Gh9^3mdPU%fQ2HlK9*EsZnng@G1oG0pg}QV2nr<_`296@sT3q0H^pbPSkW))r87u_{m;OTR@Ua;* zL6`p!P0*kasnV?|1+L$^N*B~@fdxD2K`VIVsbY2kwwu*DjpcriXRM=EJZ)kbZA97H zZDi9mcG5&}WyJvDk;p$en-czW!JgFI}2wN5jZh9IrYM5p>G6%wYe+T4;(Q|N4! z(7uXp({0A0D0uQjBV4`8jp6gfJ^aNr1!8tljxF3r_wZD^!Vk68#!H`S+e&?rt`XG! zR11I*L34$Q(9B*?((xM(7aebj=c$V4*&Xp4x0 z0?nY~VjHxo-V-R7A#Y$oaz~-EB74rj)tM*H-ItHqUSHD>=c-jtvrh+X*X(t=gS~2{ z>bZJVcY1xtX14ED4bAKBIht!!iP1CdTTZ8Av4-XzR*nYj?Y%v%E-SAI+iOGg_VoDl z>{YNe0&KUmJr6O=*7R4y@M`316Saw}U|7-Y&Oqz1&12KoyUax-W4fljDw0=bVs?z_ zmm(SXrsY-lnXh-ZO}|S9eiyFI9)vDS9ouKN51woG`i|>Mk0jk?n$MaR>oMEEz2+E9 z(mZK5JFG~yj(z9_7E^V7+_3O736NYn(djs>DV|IJu1?%>36Arg5%Z-|mk5APYRsf%7LP_@vXLbm&3 z52SB@TPj9R^HQ-=sc3G;D@pU;3T3QxHQTTRHbfy^zkb1Nh@=E`&lKr?+);`NHxo?T zT8{zSpn>wfW<*T)90O;ZfnVl+f+)p0gY9br%byET0pR2)T- z-ccu}NJ%jItCQ)3&rpHsEyq;LP;tZntNE7lLGc2;RLg1 z4@x0{W7F`vK)hBNXT2EZE;Bn_KX2y9WXGy=0#jqsm{gyT>Jzc)ebcgF&US1T8{UyU z-*paI87c0_08-DJw@jPqTAxF>&cHT?K^-_?s5~$Z1T*@;b(!r`$8ub5)P$$RgKu$1 z?rGj3C^8Br2#S7NOL%b&yf`0;%XB|s4X&yfd#CAv$O>a)-^@2caw1Ujao6-&OfGw1 zS&CGyl`_5;aHpHDj(auYPdHi1r#N6Ohv=TA>4$MAJxThR^tM!(9Q$TLnv)8^cOim2 z%|h14IbP*a7_0ogaC3Za}-i};L44r0%E?_x?0r!H11J^2kBbk^= z86(Ce8y_lHX9STtBkYV2KxD3rG-J}7REzdcrBVsDLOroD>aa0}Y%kcf$(>Ql=<$>f z#YRr*Ss)x5&vX1?iW;4EeI(-b*Fk-vQqR&)4RQ`9D^n909{Av^>tLobK9w~=YE)=q zwlY1FVML6+Iwx5!vZ@%*lCQr8+Vzo$*Z)A&b3Gxg>O?51;?@ z%+?)m@x`uPu@eEsy}FF*g}#fSePmA@rD`}pt0rx&08?5mGIdj8ulo`3N( zc;+x6!~0SZdF7m!;zq1irSsqa?fHj~pZ)mBi}!zh{=Hv4`_<3SpMLc9)9;^u@cy&M zzc~Nk-;&rQN#Me)I4|vMmd9>nX7MmEWLD@*cX~b3FBUxJ(@1RvMe^MND_y>5D>6<& z;gq6PXA-kKhO)mAV|b|WT*$cCT)o4@1|I(?awQiDv4#l2S&j=4_l#jSdKppD+7`}^ zz7G8bS&^%6N&~xZ4LYV>J{rI_51LPsVS3u0#SH1qYSSN+3xpqQ_{UPB`)7*eI}Ow8TiWTS@0xZ8 z0a9biRa%zN5m|K%bKhjH7xwYOk&$|u;qxXqK@tRq6tP8COfL{RcvPeXSL^fwZ3GXm zqft6~voSh(X?xzqT}I6{wK6;DYqr6Rp&iB~*1pzZWlwag%f9JbYzUE{0co!~1CKG= zXD)AMimqHP!O5!-{F82HW-z8g&JcVlsG-=>7Y9SorNLgl*_!G^@w(RhZVZx+| z(!XGOWnd}RFI?9;Y?axAcAwcIy@mCt>sZ)9u(czzqk%n#wtmMGy@7FTnkAxx=%YS@ zo&q%Yoc@mdpi~Octve>Tu;CorA<~Hi(uu1hjkZRJb25Q*^0FTFdd#>@K$O#|&cHLe!?(~elk$y9=qsjG0Z0*Ef*1Yw4D&PQ>rba3#xjQODl1kTZ8_F$-6x&o)g(uLX;w@?Nwdg)S}A^J5z?C&J|1WaLK}-C~-%=o~SZ8IiUU0VW@0)c6vZZ?xPc1niof zt_AlZnH+Xxdgh+RQfZ8{v>2?q&4JQMO|*DYWoI$MUoLmKn4#0cNhPG!P3vF@rh{fq zGA?vY!(ig-DmbpiTz{&hBsyYv2+pq)V%08R8>@>We>d&4$9sxYi26bMSlOf&iN;!Y_bK*VoyI z2*oiBSkeD#ZJ53O~06%!cSvVhenkgIb8?l&K%Z^LX=IFnd4NClzLhR2I9Z;Bls4_OuT3 z;uE;V#wX~aFh9Yls zW~5CR=Q51RTX|vLe0}9)A7^0uEEd!ak$5VaVKgD1z|ou8%q7%Mo~8SJK%pf8<_B*Z0}PzEPhV@k06ntfO28t2GnO@>5`cLm3IuPvt;U4;rbUh32%Jb{XKd0|vwNyTZv~saSZgTc&G;%a23}!^E(2kG0u} zFU<$Z@m?2RRcAK7tDYbrMdBA>O)?w4uB4LtRlMB1GBz_gHEoP(Bj%Nh5s#8uu8JX% zT`pOiPB3}G{aGZKK(H$%7<~UO+;R9+*l|M@@Kb0w&mR#0{yV^QDv>&Xzn)GZu7m}cO7GZ3>2id z5qeH~7w}wrG;po6cSGg{;pad9G}8n>imblIe-6OpFRHM>!%+q`hLG{Tc;9r zoI{gIUq1a~!W7+?tR?_6du+cz}}q$`-VZVe3R=EkUnw;v3A3AGSR z!GD!XB?X}b(`N}h+}T{_^&Q)T1BQ02nLgKdLeHhdGB~IOiz=S4`2!DCHZfMi(|f|! zr6g}@Ki~(F7(nJtPwW$~IGqkNmh9NOo^Il$)31K|ldrz`@rzG?`{MWi^86=Xod5ps zzWVupe*N_OUw-!Z{ONz6zyJAHKl;gwCr_Sz^uy=B{QT>uAH4YV$@3rm`}rpyoIn1} zi{Jh1#qa*{#V5af@#MSG)}5G9c;1XUEQP8jxH0WQ30iuZWt|4^M#NX;$r|~5c&d-& zIE!moWSv0C2!sIey=F*g_(l9EPr^nuWF;D@#~;Sy5AfY^9w1;;_fPN_lpL}m^EwMY zV4(#cAZoyG;Ry&mJoC#+@LHR!$WVUBikx|`T;?*spEh<3_$Br|NP%ww%Zhx+PT`TG z#DW3-2mu6Xgn}Cb_-Z(OO%F)m*YadV7GH&w@h>V{xCFjdAS*JA0ZJV{=3|^ZPGu zOi^0Nikvl7j(vi16EG+Efy)8zv~i0hdI#_&6QSH|TveiL4%)|#IjS$#dBL5Y>@0(( zMavs!p&E&{sOTCZLXcE+mx0@X*F_^F8gsY

d2mDQF!B4-7d=beB-`QNIc!0Jd*n zhY4Xp+o{fttjLLW46>eSzl79yi42c$wn4V<0ryzH3k~2n6wx>xi_<_J$`7zcyzYQ4 z?pmSi;AW0eHO3%Jwa6O}+W`s;Ly#r$0}mXbWw.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,l.k6)(()=>[(0,l.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",u,[w.error?((0,l.uX)(),(0,l.CE)("div",f,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",m,(0,c.v_)(w.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:_.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRef",data:w.treeData,props:w.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:_.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",p,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[$,w.loading]])]),_:3},8,["visible"])):((0,l.uX)(),(0,l.CE)(l.FK,{key:1},[(0,l.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>_.openDrawer&&_.openDrawer(...e))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,l.bF)(L,{modelValue:w.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>w.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",g,[w.error?((0,l.uX)(),(0,l.CE)("div",b,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",v,(0,c.v_)(w.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:_.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRefMobile",data:w.treeData,props:w.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:_.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[$,w.loading]])]),_:1},8,["modelValue","title"])],64))])}var w=a(457),_=a(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,_.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await w.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},C=a(71241);const T=(0,C.A)(F,[["render",y],["__scopeId","data-v-62eab69a"]]);var S=T},34396:function(e,t,a){"use strict";a(85331),a(4885)},34896:function(e,t,a){"use strict";a(85331)},37952:function(e,t,a){"use strict";a(85331),a(97197)},40670:function(e,t,a){"use strict";a(85331),a(99648),a(19104),a(85970)},44813:function(e,t,a){a(44114),a(18111),a(22489),a(7588),a(79577),a(41549),a(49797),a(49631),a(35623),a(59848),function(t){e.exports=t()}(function(){return function e(t,a,i){function n(r,o){if(!a[r]){if(!t[r]){var l=void 0;if(!o&&l)return require(r,!0);if(s)return s(r,!0);var d=new Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}var c=a[r]={exports:{}};t[r][0].call(c.exports,function(e){var a=t[r][1][e];return n(a||e)},c,c.exports,e,t,a,i)}return a[r].exports}for(var s=void 0,r=0;r>2,o=(3&t)<<4|a>>4,l=1>6:64,d=2>4,a=(15&r)<<4|(o=s.indexOf(e.charAt(d++)))>>2,i=(3&o)<<6|(l=s.indexOf(e.charAt(d++))),u[c++]=t,64!==o&&(u[c++]=a),64!==l&&(u[c++]=i);return u}},{"./support":30,"./utils":32}],2:[function(e,t,a){"use strict";var i=e("./external"),n=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),r=e("./stream/DataLengthProbe");function o(e,t,a,i,n){this.compressedSize=e,this.uncompressedSize=t,this.crc32=a,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var e=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new r("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,a){return e.pipe(new s).pipe(new r("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new r("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,a){"use strict";var i=e("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},a.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,a){"use strict";var i=e("./utils"),n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length,0):function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,a){"use strict";a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(e,t,a){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=e("pako"),s=e("./utils"),r=e("./stream/GenericWorker"),o=i?"uint8array":"array";function l(e,t){r.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}a.magic="\b\0",s.inherits(l,r),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){r.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},a.compressWorker=function(e){return new l("Deflate",e)},a.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,a){"use strict";function i(e,t){var a,i="";for(a=0;a>>=8;return i}function n(e,t,a,n,r,c){var h,u,f=e.file,m=e.compression,p=c!==o.utf8encode,g=s.transformTo("string",c(f.name)),b=s.transformTo("string",o.utf8encode(f.name)),v=f.comment,k=s.transformTo("string",c(v)),y=s.transformTo("string",o.utf8encode(v)),w=b.length!==f.name.length,_=y.length!==v.length,F="",C="",T="",S=f.dir,L=f.date,$={crc32:0,compressedSize:0,uncompressedSize:0};t&&!a||($.crc32=e.crc32,$.compressedSize=e.compressedSize,$.uncompressedSize=e.uncompressedSize);var x=0;t&&(x|=8),p||!w&&!_||(x|=2048);var E=0,D=0;S&&(E|=16),"UNIX"===r?(D=798,E|=function(e,t){var a=e;return e||(a=t?16893:33204),(65535&a)<<16}(f.unixPermissions,S)):(D=20,E|=function(e){return 63&(e||0)}(f.dosPermissions)),h=L.getUTCHours(),h<<=6,h|=L.getUTCMinutes(),h<<=5,h|=L.getUTCSeconds()/2,u=L.getUTCFullYear()-1980,u<<=4,u|=L.getUTCMonth()+1,u<<=5,u|=L.getUTCDate(),w&&(C=i(1,1)+i(l(g),4)+b,F+="up"+i(C.length,2)+C),_&&(T=i(1,1)+i(l(k),4)+y,F+="uc"+i(T.length,2)+T);var A="";return A+="\n\0",A+=i(x,2),A+=m.magic,A+=i(h,2),A+=i(u,2),A+=i($.crc32,4),A+=i($.compressedSize,4),A+=i($.uncompressedSize,4),A+=i(g.length,2),A+=i(F.length,2),{fileRecord:d.LOCAL_FILE_HEADER+A+g+F,dirRecord:d.CENTRAL_FILE_HEADER+i(D,2)+A+i(k.length,2)+"\0\0\0\0"+i(E,4)+i(n,4)+g+F+k}}var s=e("../utils"),r=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),d=e("../signature");function c(e,t,a,i){r.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=a,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(c,r),c.prototype.push=function(e){var t=e.meta.percent||0,a=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,r.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:a?(t+100*(a-i-1))/a:100}}))},c.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var a=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:a.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,a=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(a.dirRecord),t)this.push({data:function(e){return d.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:a.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)a=(a<<8)+this.byteAt(t);return this.index+=e,a},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=n},{"../utils":32}],19:[function(e,t,a){"use strict";var i=e("./Uint8ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,a){"use strict";var i=e("./DataReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},n.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},n.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./DataReader":18}],21:[function(e,t,a){"use strict";var i=e("./ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,a){"use strict";var i=e("../utils"),n=e("../support"),s=e("./ArrayReader"),r=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||n.uint8array?"nodebuffer"===t?new o(e):n.uint8array?new l(i.transformTo("uint8array",e)):new s(i.transformTo("array",e)):new r(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,a){"use strict";a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../utils");function s(e){i.call(this,"ConvertWorker to "+e),this.destType=e}n.inherits(s,i),s.prototype.processChunk=function(e){this.push({data:n.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,i),s.prototype.processChunk=function(e){this.streamInfo.crc32=n(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(s,n),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}n.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,a){"use strict";function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a "+e:e}},t.exports=i},{}],29:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./ConvertWorker"),s=e("./GenericWorker"),r=e("../base64"),o=e("../support"),l=e("../external"),d=null;if(o.nodestream)try{d=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function c(e,t){return new l.Promise(function(a,n){var s=[],o=e._internalType,l=e._outputType,d=e._mimeType;e.on("data",function(e,a){s.push(e),t&&t(a)}).on("error",function(e){s=[],n(e)}).on("end",function(){try{var e=function(e,t,a){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),a);case"base64":return r.encode(t);default:return i.transformTo(e,t)}}(l,function(e,t){var a,i=0,n=null,s=0;for(a=0;a>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t}(e)},a.utf8decode=function(e){return n.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,a,n,s,r=e.length,l=new Array(2*r);for(t=a=0;t>10&1023,l[a++]=56320|1023&n)}return l.length!==a&&(l.subarray?l=l.subarray(0,a):l.length=a),i.applyFromCharCode(l)}(e=i.transformTo(n.uint8array?"uint8array":"array",e))},i.inherits(d,r),d.prototype.processChunk=function(e){var t=i.transformTo(n.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(n.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var r=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+o[e[a]]>t?a:t}(t),l=t;r!==t.length&&(n.uint8array?(l=t.subarray(0,r),this.leftOver=t.subarray(r,t.length)):(l=t.slice(0,r),this.leftOver=t.slice(r,t.length))),this.push({data:a.utf8decode(l),meta:e.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=d,i.inherits(c,r),c.prototype.processChunk=function(e){this.push({data:a.utf8encode(e.data),meta:e.meta})},a.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var i=e("./support"),n=e("./base64"),s=e("./nodejsUtils"),r=e("./external");function o(e){return e}function l(e,t){for(var a=0;a>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===n.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===n.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===n.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===n.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,a,i,n=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t},a.buf2binstring=function(e){return l(e,e.length)},a.binstring2buf=function(e){for(var t=new i.Buf8(e.length),a=0,n=t.length;a>10&1023,d[i++]=56320|1023&n)}return l(d,i)},a.utf8border=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+r[e[a]]>t?a:t}},{"./common":41}],43:[function(e,t,a){"use strict";t.exports=function(e,t,a,i){for(var n=65535&e,s=e>>>16&65535,r=0;0!==a;){for(a-=r=2e3>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t,a,n){var s=i,r=n+a;e^=-1;for(var o=n;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,a){"use strict";var i,n=e("../utils/common"),s=e("./trees"),r=e("./adler32"),o=e("./crc32"),l=e("./messages"),d=0,c=4,h=0,u=-2,f=-1,m=4,p=2,g=8,b=9,v=286,k=30,y=19,w=2*v+1,_=15,F=3,C=258,T=C+F+1,S=42,L=113,$=1,x=2,E=3,D=4;function A(e,t){return e.msg=l[t],t}function I(e){return(e<<1)-(4e.avail_out&&(a=e.avail_out),0!==a&&(n.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function B(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,U(e.strm)}function P(e,t){e.pending_buf[e.pending++]=t}function W(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function R(e,t){var a,i,n=e.max_chain_length,s=e.strstart,r=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-T?e.strstart-(e.w_size-T):0,d=e.window,c=e.w_mask,h=e.prev,u=e.strstart+C,f=d[s+r-1],m=d[s+r];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(d[(a=t)+r]===m&&d[a+r-1]===f&&d[a]===d[s]&&d[++a]===d[s+1]){s+=2,a++;do{}while(d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&sl&&0!=--n);return r<=e.lookahead?r:e.lookahead}function N(e){var t,a,i,s,l,d,c,h,u,f,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-T)){for(n.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=a=e.hash_size;i=e.head[--t],e.head[t]=m<=i?i-m:0,--a;);for(t=a=m;i=e.prev[--t],e.prev[t]=m<=i?i-m:0,--a;);s+=m}if(0===e.strm.avail_in)break;if(d=e.strm,c=e.window,h=e.strstart+e.lookahead,u=s,f=void 0,f=d.avail_in,u=F)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F)if(i=s._tr_tally(e,e.strstart-e.match_start,e.match_length-F),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=F){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F&&e.match_length<=e.prev_length){for(n=e.strstart+e.lookahead-F,i=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-F),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=n&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(N(e),0===e.lookahead&&t===d)return $;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+a;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,B(e,!1),0===e.strm.avail_out))return $;if(e.strstart-e.block_start>=e.w_size-T&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):(e.strstart>e.block_start&&(B(e,!1),e.strm.avail_out),$)}),new V(4,4,8,4,O),new V(4,5,16,8,O),new V(4,6,32,32,O),new V(4,4,16,16,M),new V(8,16,32,32,M),new V(8,16,128,128,M),new V(8,32,128,256,M),new V(32,128,258,1024,M),new V(32,258,258,4096,M)],a.deflateInit=function(e,t){return Z(e,t,g,15,8,0)},a.deflateInit2=Z,a.deflateReset=K,a.deflateResetKeep=j,a.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?u:(e.state.gzhead=t,h):u},a.deflate=function(e,t){var a,n,r,l;if(!e||!e.state||5>8&255),P(n,n.gzhead.time>>16&255),P(n,n.gzhead.time>>24&255),P(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),P(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(P(n,255&n.gzhead.extra.length),P(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=o(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(P(n,0),P(n,0),P(n,0),P(n,0),P(n,0),P(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),P(n,3),n.status=L);else{var f=g+(n.w_bits-8<<4)<<8;f|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(f|=32),f+=31-f%31,n.status=L,W(n,f),0!==n.strstart&&(W(n,e.adler>>>16),W(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(r=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending!==n.pending_buf_size));)P(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&U(e),n.pending+2<=n.pending_buf_size&&(P(n,255&e.adler),P(n,e.adler>>8&255),e.adler=0,n.status=L)):n.status=L),0!==n.pending){if(U(e),0===e.avail_out)return n.last_flush=-1,h}else if(0===e.avail_in&&I(t)<=I(a)&&t!==c)return A(e,-5);if(666===n.status&&0!==e.avail_in)return A(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==d&&666!==n.status){var m=2===n.strategy?function(e,t){for(var a;;){if(0===e.lookahead&&(N(e),0===e.lookahead)){if(t===d)return $;break}if(e.match_length=0,a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?$:x}(n,t):3===n.strategy?function(e,t){for(var a,i,n,r,o=e.window;;){if(e.lookahead<=C){if(N(e),e.lookahead<=C&&t===d)return $;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=F&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=F?(a=s._tr_tally(e,1,e.match_length-F),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?$:x}(n,t):i[n.level].func(n,t);if(m!==E&&m!==D||(n.status=666),m===$||m===E)return 0===e.avail_out&&(n.last_flush=-1),h;if(m===x&&(1===t?s._tr_align(n):5!==t&&(s._tr_stored_block(n,0,0,!1),3===t&&(z(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),U(e),0===e.avail_out))return n.last_flush=-1,h}return t!==c?h:n.wrap<=0?1:(2===n.wrap?(P(n,255&e.adler),P(n,e.adler>>8&255),P(n,e.adler>>16&255),P(n,e.adler>>24&255),P(n,255&e.total_in),P(n,e.total_in>>8&255),P(n,e.total_in>>16&255),P(n,e.total_in>>24&255)):(W(n,e.adler>>>16),W(n,65535&e.adler)),U(e),0=a.w_size&&(0===o&&(z(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new n.Buf8(a.w_size),n.arraySet(f,t,m-a.w_size,a.w_size,0),t=f,m=a.w_size),l=e.avail_in,d=e.next_in,c=e.input,e.avail_in=m,e.next_in=0,e.input=t,N(a);a.lookahead>=F;){for(i=a.strstart,s=a.lookahead-(F-1);a.ins_h=(a.ins_h<>>=y=k>>>24,m-=y,0===(y=k>>>16&255))S[s++]=65535&k;else{if(!(16&y)){if(0==(64&y)){k=p[(65535&k)+(f&(1<>>=y,m-=y),m<15&&(f+=T[i++]<>>=y=k>>>24,m-=y,!(16&(y=k>>>16&255))){if(0==(64&y)){k=g[(65535&k)+(f&(1<>>=y,m-=y,(y=s-r)<_){if(c<(y=_-y)&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(C=u,(F=0)===h){if(F+=d-y,y>3,f&=(1<<(m-=w<<3))-1,e.next_in=i,e.next_out=s,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(f),t.distcode=t.distdyn=new i.Buf32(m),t.sane=1,t.back=-1,c):h}function v(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,b(e)):h}function k(e,t){var a,i;return e&&e.state?(i=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=r.wsize?(i.arraySet(r.window,t,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(s=r.wsize-r.wnext)&&(s=n),i.arraySet(r.window,t,a-n,s,r.wnext),(n-=s)?(i.arraySet(r.window,t,a-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=s,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=s(a.check,N,2,0),w=y=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg="incorrect header check",a.mode=30;break}if(8!=(15&y)){e.msg="unknown compression method",a.mode=30;break}if(w-=4,U=8+(15&(y>>>=4)),0===a.wbits)a.wbits=U;else if(U>a.wbits){e.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(N[0]=255&y,N[1]=y>>>8&255,a.check=s(a.check,N,2,0)),w=y=0,a.mode=3;case 3:for(;w<32;){if(0===v)break e;v--,y+=f[g++]<>>8&255,N[2]=y>>>16&255,N[3]=y>>>24&255,a.check=s(a.check,N,4,0)),w=y=0,a.mode=4;case 4:for(;w<16;){if(0===v)break e;v--,y+=f[g++]<>8),512&a.flags&&(N[0]=255&y,N[1]=y>>>8&255,a.check=s(a.check,N,2,0)),w=y=0,a.mode=5;case 5:if(1024&a.flags){for(;w<16;){if(0===v)break e;v--,y+=f[g++]<>>8&255,a.check=s(a.check,N,2,0)),w=y=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(v<(S=a.length)&&(S=v),S&&(a.head&&(U=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),i.arraySet(a.head.extra,f,g,S,U)),512&a.flags&&(a.check=s(a.check,f,S,g)),v-=S,g+=S,a.length-=S),a.length))break e;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===v)break e;for(S=0;U=f[g+S++],a.head&&U&&a.length<65536&&(a.head.name+=String.fromCharCode(U)),U&&S>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=12;break;case 10:for(;w<32;){if(0===v)break e;v--,y+=f[g++]<>>=7&w,w-=7&w,a.mode=27;break}for(;w<3;){if(0===v)break e;v--,y+=f[g++]<>>=1)){case 0:a.mode=14;break;case 1:if(C(a),a.mode=20,6!==t)break;y>>>=2,w-=2;break e;case 2:a.mode=17;break;case 3:e.msg="invalid block type",a.mode=30}y>>>=2,w-=2;break;case 14:for(y>>>=7&w,w-=7&w;w<32;){if(0===v)break e;v--,y+=f[g++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&y,w=y=0,a.mode=15,6===t)break e;case 15:a.mode=16;case 16:if(S=a.length){if(v>>=5,w-=5,a.ndist=1+(31&y),y>>>=5,w-=5,a.ncode=4+(15&y),y>>>=4,w-=4,286>>=3,w-=3}for(;a.have<19;)a.lens[O[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,P={bits:a.lenbits},B=o(0,a.lens,0,19,a.lencode,0,a.work,P),a.lenbits=P.bits,B){e.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=x,w-=x,a.lens[a.have++]=D;else{if(16===D){for(W=x+2;w>>=x,w-=x,0===a.have){e.msg="invalid bit length repeat",a.mode=30;break}U=a.lens[a.have-1],S=3+(3&y),y>>>=2,w-=2}else if(17===D){for(W=x+3;w>>=x)),y>>>=3,w-=3}else{for(W=x+7;w>>=x)),y>>>=7,w-=7}if(a.have+S>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=30;break}for(;S--;)a.lens[a.have++]=U}}if(30===a.mode)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,P={bits:a.lenbits},B=o(l,a.lens,0,a.nlen,a.lencode,0,a.work,P),a.lenbits=P.bits,B){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,P={bits:a.distbits},B=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,P),a.distbits=P.bits,B){e.msg="invalid distances set",a.mode=30;break}if(a.mode=20,6===t)break e;case 20:a.mode=21;case 21:if(6<=v&&258<=k){e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=w,r(e,F),b=e.next_out,m=e.output,k=e.avail_out,g=e.next_in,f=e.input,v=e.avail_in,y=a.hold,w=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;E=(R=a.lencode[y&(1<>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>A)])>>>16&255,D=65535&R,!(A+(x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=A,w-=A,a.back+=A}if(y>>>=x,w-=x,a.back+=x,a.length=D,0===E){a.mode=26;break}if(32&E){a.back=-1,a.mode=12;break}if(64&E){e.msg="invalid literal/length code",a.mode=30;break}a.extra=15&E,a.mode=22;case 22:if(a.extra){for(W=a.extra;w>>=a.extra,w-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;E=(R=a.distcode[y&(1<>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>A)])>>>16&255,D=65535&R,!(A+(x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=A,w-=A,a.back+=A}if(y>>>=x,w-=x,a.back+=x,64&E){e.msg="invalid distance code",a.mode=30;break}a.offset=D,a.extra=15&E,a.mode=24;case 24:if(a.extra){for(W=a.extra;w>>=a.extra,w-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===k)break e;if(S=F-k,a.offset>S){if((S=a.offset-S)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=30;break}L=S>a.wnext?(S-=a.wnext,a.wsize-S):a.wnext-S,S>a.length&&(S=a.length),$=a.window}else $=m,L=b-a.offset,S=a.length;for(kv?(y=P[W+h[C]],I[z+h[C]]):(y=96,0),f=1<>x)+(m-=f)]=k<<24|y<<16|w,0!==m;);for(f=1<>=1;if(0!==f?(A&=f-1,A+=f):A=0,C++,0==--U[F]){if(F===S)break;F=t[a+h[C]]}if(L>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function W(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1,0<--t;);return a>>>1}function O(e,t,a){var i,n,s=new Array(m+1),r=0;for(i=1;i<=m;i++)s[i]=r=r+a[i-1]<<1;for(n=0;n<=t;n++){var o=e[2*n+1];0!==o&&(e[2*n]=N(s[o]++,o))}}function M(e){var t;for(t=0;t>1;1<=a;a--)j(e,s,a);for(n=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,s,1),i=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=i,s[2*n]=s[2*a]+s[2*i],e.depth[n]=(e.depth[a]>=e.depth[i]?e.depth[a]:e.depth[i])+1,s[2*a+1]=s[2*i+1]=n,e.heap[1]=n++,j(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,i,n,s,r,o,l=t.dyn_tree,d=t.max_code,c=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,g=t.stat_desc.max_length,b=0;for(s=0;s<=m;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;a>=7;i>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return n;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=a+5,a+4<=r&&-1!==t?Q(e,t,a,i):4===e.strategy||o===r?(W(e,2+(i?1:0),3),K(e,T,S)):(W(e,4+(i?1:0),3),function(e,t,a,i){var n;for(W(e,t-257,5),W(e,a-1,5),W(e,i-4,4),n=0;n>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*($[a]+d+1)]++,e.dyn_dtree[2*B(t)]++),e.last_lit===e.lit_bufsize-1},a._tr_align=function(e){W(e,2,3),R(e,b,T),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,a){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,i){(function(e){!function(e,t){"use strict";if(!e.setImmediate){var a,i,n,s,r=1,o={},l=!1,d=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,a="[object process]"==={}.toString.call(e.process)?function(e){process.nextTick(function(){u(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=a,t}}()?(s="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",f,!1):e.attachEvent("onmessage",f),function(t){e.postMessage(s+t,"*")}):e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){u(e.data)},function(e){n.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,function(e){var t=d.createElement("script");t.onreadystatechange=function(){u(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):function(e){setTimeout(u,0,e)},c.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return n.test(e)?{valid:!1,error:i.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},63003:function(e,t,a){"use strict";a(85331)},70415:function(e,t,a){"use strict";a(85331),a(73565)},72907:function(e,t,a){"use strict";a(85331),a(96808),a(29092)},73044:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return En}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(31802)),r=(a(13378),a(9267)),o=(a(15616),a(33892)),l=a(80047),d=(a(99648),a(39623)),c=(a(29092),a(56768)),h=a(24232);const u={class:"move-file-dialog-wrapper"},f={class:"move-dialog-content"},m={class:"move-path-input-container"},p={class:"move-dialog-hint"},g={class:"dialog-footer"},b={class:"move-drawer-content"},v={class:"move-path-section"},k={class:"move-path-label"},y={class:"move-path-input-row"},w={class:"move-dialog-hint"},_={key:0,class:"embedded-tree-section"},F={class:"tree-section-header"},C={class:"tree-section-title"},T={class:"tree-container"},S={key:0,class:"error-state"},L={class:"error-text"},$={class:"node-label"},x={class:"drawer-footer"};function E(e,t,a,E,D,A){const I=d.WK,z=(0,c.g2)("font-awesome-icon"),U=l.S2,B=o.A,P=r.kZ,W=s.qk,R=n.pw,N=i.A;return(0,c.uX)(),(0,c.CE)("div",u,[A.isDesktop?((0,c.uX)(),(0,c.Wv)(P,{key:0,modelValue:A.dialogVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),width:"500px","show-close":!0,class:"move-dialog",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",g,[(0,c.bF)(U,{onClick:A.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(U,{type:"primary",loading:D.loading,onClick:A.handleConfirm},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",f,[(0,c.Lk)("div",m,[(0,c.bF)(I,{modelValue:D.targetPath,"onUpdate:modelValue":t[0]||(t[0]=e=>D.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},{prepend:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.targetDirectory")),1)]),_:1},8,["modelValue","placeholder"]),(0,c.bF)(B,{"current-directory":a.currentDirectory,source:"admin",onSelect:A.handleDirectorySelect},{trigger:(0,c.k6)(()=>[(0,c.bF)(U,{class:"directory-picker-trigger"},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])]),(0,c.Lk)("p",p,(0,h.v_)(e.$t("moveFile.hint")),1)])]),_:1},8,["modelValue","title","onClose"])):((0,c.uX)(),(0,c.Wv)(R,{key:1,modelValue:A.dialogVisible,"onUpdate:modelValue":t[5]||(t[5]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),direction:"btt",size:"auto","show-close":!0,class:"move-drawer",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("div",x,[(0,c.bF)(U,{onClick:A.handleClose,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(U,{type:"primary",loading:D.loading,onClick:A.handleConfirm,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",b,[(0,c.Lk)("div",v,[(0,c.Lk)("div",k,(0,h.v_)(e.$t("moveFile.targetDirectory")),1),(0,c.Lk)("div",y,[(0,c.bF)(I,{modelValue:D.targetPath,"onUpdate:modelValue":t[2]||(t[2]=e=>D.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},null,8,["modelValue","placeholder"]),(0,c.bF)(U,{class:"directory-picker-trigger",onClick:t[3]||(t[3]=e=>D.showTreePicker=!0)},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"folder-tree"})]),_:1})]),(0,c.Lk)("p",w,(0,h.v_)(e.$t("moveFile.hintMobile")),1)]),D.showTreePicker?((0,c.uX)(),(0,c.CE)("div",_,[(0,c.Lk)("div",F,[(0,c.Lk)("span",C,(0,h.v_)(e.$t("moveFile.selectDirectory")),1),(0,c.bF)(U,{text:"",onClick:t[4]||(t[4]=e=>D.showTreePicker=!1)},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"times"})]),_:1})]),(0,c.bo)(((0,c.uX)(),(0,c.CE)("div",T,[D.treeError?((0,c.uX)(),(0,c.CE)("div",S,[(0,c.bF)(z,{icon:"exclamation-circle",class:"error-icon"}),(0,c.Lk)("span",L,(0,h.v_)(D.treeError),1),(0,c.bF)(U,{type:"primary",size:"small",onClick:A.fetchDirectoryTree},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.retry")),1)]),_:1},8,["onClick"])])):((0,c.uX)(),(0,c.Wv)(W,{key:1,ref:"treeRef",data:D.treeData,props:D.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:A.handleTreeNodeClick},{default:(0,c.k6)(({node:e,data:t})=>[(0,c.Lk)("span",{class:(0,h.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,c.bF)(z,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,c.Lk)("span",$,(0,h.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[N,D.treeLoading]])])):(0,c.Q3)("",!0)])]),_:1},8,["modelValue","title","onClose"]))])}var D=a(70797),A={name:"MoveFileDialog",components:{DirectoryTreePicker:o.A},props:{modelValue:{type:Boolean,default:!1},currentDirectory:{type:String,default:""},isBatchMove:{type:Boolean,default:!1},initialPath:{type:String,default:"/"}},emits:["update:modelValue","confirm","close"],data(){return{targetPath:"/",loading:!1,windowWidth:window.innerWidth,showTreePicker:!1,treeData:[],treeLoading:!1,treeError:"",treeProps:{children:"children",label:"name"}}},computed:{dialogVisible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},isDesktop(){return this.windowWidth>768}},watch:{modelValue(e){e&&(this.targetPath=this.initialPath||"/",this.showTreePicker=!1)},showTreePicker(e){e&&!this.isDesktop&&this.fetchDirectoryTree()}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},handleDirectorySelect(e){this.targetPath=e},handleConfirm(){this.$emit("confirm",this.targetPath)},handleClose(){this.$emit("update:modelValue",!1),this.$emit("close")},async fetchDirectoryTree(){this.treeLoading=!0,this.treeError="";try{const e=await(0,D.A)("/api/directoryTree",{method:"GET"});if(!e.ok)return void(401===e.status?this.treeError=this.$t("moveFile.authFailed"):this.treeError=this.$t("moveFile.serverError"));const t=await e.json();t.tree?this.treeData=[t.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),this.treeError=this.$t("moveFile.loadTreeFailed")}finally{this.treeLoading=!1}},handleTreeNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.targetPath=t,this.showTreePicker=!1}}},I=a(71241);const z=(0,I.A)(A,[["render",E],["__scopeId","data-v-7aaa437c"]]);var U=z,B=a(45130);const P={class:"mobile-drawer-header"},W={class:"mobile-drawer-title"},R={class:"mobile-drawer-content"},N=["onClick"];function O(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"drawer-slide"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-overlay",onClick:t[3]||(t[3]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"mobile-drawer",onClick:t[2]||(t[2]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",P,[(0,c.Lk)("span",W,(0,h.v_)(e.$t("mobileDirectory.title")),1),(0,c.bF)(r,{icon:"times",class:"mobile-drawer-close",onClick:s.close},null,8,["onClick"])]),(0,c.Lk)("div",R,[(0,c.Lk)("div",{class:(0,h.C4)(["mobile-drawer-item",{active:!a.currentPath}]),onClick:t[0]||(t[0]=e=>s.navigate(""))},[(0,c.bF)(r,{icon:"home",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.rootDirectory")),1)],2),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.pathParts,(e,t)=>((0,c.uX)(),(0,c.CE)("div",{key:t,class:(0,h.C4)(["mobile-drawer-item",{active:t===s.pathParts.length-1}]),style:(0,h.Tr)({paddingLeft:16*(t+1)+16+"px"}),onClick:e=>s.navigate(s.pathParts.slice(0,t+1).join("/"))},[(0,c.bF)(r,{icon:"folder",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e),1)],14,N))),128)),a.currentPath?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-back",onClick:t[1]||(t[1]=(...e)=>s.goBack&&s.goBack(...e))},[(0,c.bF)(r,{icon:"arrow-left",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.goBack")),1)])):(0,c.Q3)("",!0)])])])):(0,c.Q3)("",!0)]),_:1})])}a(18111),a(22489);var M={name:"MobileDirectoryDrawer",props:{modelValue:{type:Boolean,default:!1},currentPath:{type:String,default:""}},emits:["update:modelValue","navigate","goBack"],computed:{pathParts(){return this.currentPath.split("/").filter(Boolean)}},methods:{close(){this.$emit("update:modelValue",!1)},navigate(e){this.$emit("navigate",e),this.close()},goBack(){this.$emit("goBack"),this.close()}}};const V=(0,I.A)(M,[["render",O],["__scopeId","data-v-feeadb1c"]]);var X=V;const j={class:"bottom-sheet-header"},K={class:"bottom-sheet-title"},Z={class:"bottom-sheet-content"};function H(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"bottom-sheet"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"bottom-sheet-overlay",onClick:t[9]||(t[9]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"bottom-sheet",onClick:t[8]||(t[8]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",j,[t[10]||(t[10]=(0,c.Lk)("div",{class:"bottom-sheet-handle"},null,-1)),(0,c.Lk)("span",K,(0,h.v_)(a.title),1)]),(0,c.Lk)("div",Z,[a.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[5]||(t[5]=e=>s.handleAction("folderCopy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[6]||(t[6]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFolder")),1)])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[0]||(t[0]=e=>s.handleAction("detail"))},[(0,c.bF)(r,{icon:"info-circle",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.viewDetail")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[1]||(t[1]=e=>s.handleAction("copy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[2]||(t[2]=e=>s.handleAction("download"))},[(0,c.bF)(r,{icon:"download",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.downloadFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[3]||(t[3]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[4]||(t[4]=e=>s.handleAction("tag"))},[(0,c.bF)(r,{icon:"tags",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.tagManagement")),1)])],64)),(0,c.Lk)("div",{class:"bottom-sheet-item bottom-sheet-danger",onClick:t[7]||(t[7]=e=>s.handleAction("delete"))},[(0,c.bF)(r,{icon:"trash-alt",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(a.isFolder?e.$t("mobileAction.deleteFolder"):e.$t("mobileAction.deleteFile")),1)])])])])):(0,c.Q3)("",!0)]),_:1})])}var G={name:"MobileActionSheet",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},isFolder:{type:Boolean,default:!1}},emits:["update:modelValue","action"],methods:{close(){this.$emit("update:modelValue",!1)},handleAction(e){this.$emit("action",e),this.close()}}};const q=(0,I.A)(G,[["render",H],["__scopeId","data-v-f5c66568"]]);var Q=q,Y=a(4275),J=a(89559),ee=a(12687);a(18785);const te={class:"batch-tag-container"},ae={class:"tab-content"},ie={class:"tab-description"},ne={class:"input-section"},se={key:0,class:"suggestions-panel"},re=["onClick"],oe={class:"tags-to-add-section"},le={key:0,class:"tags-container"},de={key:1,class:"empty-message"},ce={class:"action-buttons"},he={class:"tab-content"},ue={class:"tab-description"},fe={key:0,class:"common-tags-section"},me={class:"tags-container"},pe={key:1,class:"empty-message"},ge={class:"tab-content"},be={class:"tab-description"},ve={class:"action-buttons"};function ke(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=Y.v$,g=J.KR,b=Y.q,v=r.kZ;return(0,c.uX)(),(0,c.Wv)(v,{title:e.$t("batchTag.title"),modelValue:s.visible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{default:(0,c.k6)(()=>[(0,c.Lk)("div",te,[(0,c.bF)(b,{modelValue:n.activeTab,"onUpdate:modelValue":t[1]||(t[1]=e=>n.activeTab=e),type:"border-card"},{default:(0,c.k6)(()=>[(0,c.bF)(p,{label:e.$t("batchTag.addTab"),name:"add"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ae,[(0,c.Lk)("p",ie,(0,h.v_)(e.$t("batchTag.addDescription",{count:s.fileCount})),1),(0,c.Lk)("div",ne,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("batchTag.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddInputTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddInputTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,re))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",oe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.pendingTags")),1),n.tagsToAdd.length>0?((0,c.uX)(),(0,c.CE)("div",le,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.tagsToAdd,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.removeFromToAdd(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",de,(0,h.v_)(e.$t("batchTag.noPendingTags")),1))]),(0,c.Lk)("div",ce,[(0,c.bF)(u,{type:"primary",onClick:s.executeAddTags,loading:n.loading,disabled:0===n.tagsToAdd.length},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.addToAllFiles")),1)]),_:1},8,["onClick","loading","disabled"])])])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.removeTab"),name:"remove"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",he,[(0,c.Lk)("p",ue,(0,h.v_)(e.$t("batchTag.removeDescription")),1),n.commonTags.length>0?((0,c.uX)(),(0,c.CE)("div",fe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.commonTags")),1),(0,c.Lk)("div",me,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.commonTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveCommonTag(e),class:"tag-item",type:"warning"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])])):((0,c.uX)(),(0,c.CE)("div",pe,(0,h.v_)(e.$t("batchTag.noCommonTags")),1))])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.clearTab"),name:"clear"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ge,[(0,c.Lk)("p",be,(0,h.v_)(e.$t("batchTag.clearDescription",{count:s.fileCount})),1),(0,c.bF)(g,{title:e.$t("batchTag.clearWarningTitle"),type:"warning",description:e.$t("batchTag.clearWarningDesc"),closable:!1,style:{"margin-bottom":"20px"},center:""},null,8,["title","description"]),(0,c.Lk)("div",ve,[(0,c.bF)(u,{type:"danger",onClick:s.handleClearAllTags,loading:n.loading},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.confirmClearAll")),1)]),_:1},8,["onClick","loading"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["title","modelValue","width","onClose"])}a(44114),a(61701);var ye=a(51219),we=a(12933),_e={name:"BatchTagDialog",props:{modelValue:{type:Boolean,default:!1},selectedFiles:{type:Array,required:!0,default:()=>[]}},emits:["update:modelValue","tagsUpdated"],data(){return{activeTab:"add",inputTag:"",tagsToAdd:[],commonTags:[],suggestions:[],showSuggestions:!1,loading:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"600px"},selectedFilesOnly(){return this.selectedFiles.filter(e=>!e.isFolder)},fileCount(){return this.selectedFilesOnly.length},fileIds(){return this.selectedFilesOnly.map(e=>e.name)}},watch:{visible(e){e?this.loadCommonTags():this.resetData()},activeTab(e){"remove"===e&&this.loadCommonTags()}},methods:{resetData(){this.tagsToAdd=[],this.inputTag="",this.showSuggestions=!1,this.activeTab="add"},async loadCommonTags(){if(0!==this.selectedFilesOnly.length)try{const e=this.selectedFilesOnly.map(e=>(0,D.A)(`/api/manage/tags/${encodeURIComponent(e.name)}`,{method:"GET"})),t=await Promise.all(e),a=[];for(const i of t)if(i.ok){const e=await i.json();a.push(e.tags||[])}a.length>0?this.commonTags=a[0].filter(e=>a.every(t=>t.includes(e))):this.commonTags=[]}catch(e){console.error("Error loading common tags:",e),ye.nk.error(this.$t("batchTag.loadCommonTagsFailed"))}else this.commonTags=[]},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,D.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.tagsToAdd.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddInputTag()},handleAddInputTag(){const e=this.inputTag.trim();if(e){if(this.tagsToAdd.includes(e))return ye.nk.warning(this.$t("batchTag.tagAlreadyInList")),this.inputTag="",void(this.showSuggestions=!1);this.tagsToAdd.push(e),this.inputTag="",this.showSuggestions=!1}},removeFromToAdd(e){const t=this.tagsToAdd.indexOf(e);t>-1&&this.tagsToAdd.splice(t,1)},async executeAddTags(){if(0!==this.tagsToAdd.length){this.loading=!0;try{const e=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"add",tags:this.tagsToAdd})});if(!e.ok)throw new Error(this.$t("batchTag.addFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.addFailed"));ye.nk.success(this.$t("batchTag.addSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.tagsToAdd=[]}}catch(e){console.error("Error adding tags:",e),ye.nk.error(this.$t("batchTag.addFailed"))}finally{this.loading=!1}}else ye.nk.warning(this.$t("batchTag.pleaseAddTags"))},async handleRemoveCommonTag(e){this.loading=!0;try{const t=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("batchTag.removeFailed"));{const e=await t.json();if(!(e.success||e.updated>0))throw new Error(this.$t("batchTag.removeFailed"));ye.nk.success(this.$t("batchTag.removeSuccess",{count:e.updated})),this.$emit("tagsUpdated"),await this.loadCommonTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("batchTag.removeFailed"))}finally{this.loading=!1}},handleClearAllTags(){we.s.confirm(this.$t("batchTag.clearConfirmMessage",{count:this.fileCount}),this.$t("batchTag.clearConfirmTitle"),{confirmButtonText:this.$t("batchTag.clearConfirmOk"),cancelButtonText:this.$t("batchTag.clearConfirmCancel"),type:"warning"}).then(()=>{this.executeClearTags()}).catch(()=>{ye.nk.info(this.$t("batchTag.clearCancelled"))})},async executeClearTags(){this.loading=!0;try{const e=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"set",tags:[]})});if(!e.ok)throw new Error(this.$t("batchTag.clearFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.clearFailed"));ye.nk.success(this.$t("batchTag.clearSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.commonTags=[]}}catch(e){console.error("Error clearing tags:",e),ye.nk.error(this.$t("batchTag.clearFailed"))}finally{this.loading=!1}},handleClose(){this.visible=!1}}};const Fe=(0,I.A)(_e,[["render",ke],["__scopeId","data-v-54f87f24"]]);var Ce=Fe,Te=a(813);a(34896);const Se={class:"tag-management-container"},Le={class:"input-section"},$e={key:0,class:"suggestions-panel"},xe=["onClick"],Ee={class:"current-tags-section"},De={key:0,class:"tags-container"},Ae={key:1,class:"empty-message"},Ie={class:"popular-tags-section"},ze={key:0,class:"tags-container"},Ue={key:1,class:"empty-message"},Be={key:2,class:"empty-message"},Pe={class:"dialog-footer"};function We(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=(0,c.g2)("Loading"),g=Te.tk,b=r.kZ;return(0,c.uX)(),(0,c.Wv)(b,{title:e.$t("tagManagement.title"),modelValue:s.visible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",Pe,[(0,c.bF)(u,{onClick:s.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("tagManagement.close")),1)]),_:1},8,["onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",Se,[(0,c.Lk)("div",Le,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("tagManagement.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",$e,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,xe))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Ee,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.currentTags")),1),n.currentTags.length>0?((0,c.uX)(),(0,c.CE)("div",De,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveTag(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",Ae,(0,h.v_)(e.$t("tagManagement.noTags")),1))]),(0,c.Lk)("div",Ie,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.popularTags")),1),n.popularTags.length>0?((0,c.uX)(),(0,c.CE)("div",ze,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.popularTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,onClick:t=>s.handleAddPopularTag(e),class:"tag-item clickable",type:"info"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))])):n.loadingPopularTags?((0,c.uX)(),(0,c.CE)("div",Ue,[(0,c.bF)(g,{class:"is-loading"},{default:(0,c.k6)(()=>[(0,c.bF)(p)]),_:1}),(0,c.eW)(" "+(0,h.v_)(e.$t("tagManagement.loading")),1)])):((0,c.uX)(),(0,c.CE)("div",Be,(0,h.v_)(e.$t("tagManagement.noPopularTags")),1))])])]),_:1},8,["title","modelValue","width","onClose"])}var Re=a(57477),Ne={name:"TagManagementDialog",components:{Loading:Re.Loading},props:{modelValue:{type:Boolean,default:!1},fileId:{type:String,required:!0}},emits:["update:modelValue","tagsUpdated"],data(){return{currentTags:[],inputTag:"",suggestions:[],popularTags:[],showSuggestions:!1,loading:!1,loadingPopularTags:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"500px"}},watch:{visible(e){e&&(this.loadFileTags(),this.loadPopularTags())}},methods:{async loadFileTags(){try{const e=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"GET"});if(!e.ok)throw new Error("Failed to load tags");{const t=await e.json();this.currentTags=t.tags||[]}}catch(e){console.error("Error loading file tags:",e),ye.nk.error(this.$t("tagManagement.loadFailed"))}},async loadPopularTags(){this.loadingPopularTags=!0;try{const e=await(0,D.A)("/api/manage/tags/autocomplete?limit=20",{method:"GET"});if(e.ok){const t=await e.json();this.popularTags=(t.tags||[]).filter(e=>!this.currentTags.includes(e))}}catch(e){console.error("Error loading popular tags:",e)}finally{this.loadingPopularTags=!1}},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,D.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.currentTags.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddTag()},async handleAddTag(){const e=this.inputTag.trim();if(e){if(this.currentTags.includes(e))return ye.nk.warning(this.$t("tagManagement.tagExists")),this.inputTag="",void(this.showSuggestions=!1);try{const t=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add",tags:[e]})});if(!t.ok){const e=await t.json();throw new Error(e.message||this.$t("tagManagement.addFailed"))}{const e=await t.json();this.currentTags=e.tags||[],this.inputTag="",this.showSuggestions=!1,ye.nk.success(this.$t("tagManagement.addSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error adding tag:",t),ye.nk.error(t.message||this.$t("tagManagement.addFailed"))}}},async handleRemoveTag(e){try{const t=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("tagManagement.removeFailed"));{const e=await t.json();this.currentTags=e.tags||[],ye.nk.success(this.$t("tagManagement.removeSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("tagManagement.removeFailed"))}},handleAddPopularTag(e){this.inputTag=e,this.handleAddTag()},handleClose(){this.visible=!1,this.inputTag="",this.showSuggestions=!1,this.currentTags=[],this.popularTags=[]}}};const Oe=(0,I.A)(Ne,[["render",We],["__scopeId","data-v-1dabc380"]]);var Me=Oe,Ve=a(55558),Xe=(a(10456),a(66810)),je=(a(4885),a(82006)),Ke=(a(98642),a(63003),a(59869)),Ze=(a(70415),a(73565),a(57009));a(78450);const He={class:"detail-actions"},Ge={class:"preview-section"},qe={class:"preview-content"},Qe=["src"],Ye=["src"],Je={key:1},et={key:1},tt={key:0,style:{display:"flex","align-items":"center",gap:"6px"}},at={key:1,style:{color:"var(--el-text-color-secondary)"}},it={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"5px"}},nt={key:1,style:{color:"var(--el-text-color-secondary)"}};function st(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=Y.v$,p=Y.q,g=Ze.Zq,b=Ke.MF,v=ee.u,k=Ke.TS,y=je.xE,w=je.US,_=r.kZ;return(0,c.uX)(),(0,c.Wv)(_,{title:e.$t("fileDetail.title"),modelValue:s.visible,"onUpdate:modelValue":t[24]||(t[24]=e=>s.visible=e),width:s.dialogWidth},{default:(0,c.k6)(()=>[(0,c.Lk)("div",He,[n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:0,type:"primary",onClick:t[0]||(t[0]=t=>e.$emit("download")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"download",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.download")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:1,type:"primary",onClick:t[1]||(t[1]=t=>e.$emit("tagManagement")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"tags",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.tags")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:2,type:"primary",onClick:t[2]||(t[2]=t=>e.$emit("block")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"ban",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.blacklist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:3,type:"primary",onClick:t[3]||(t[3]=t=>e.$emit("white")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"shield-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.whitelist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:4,type:"danger",onClick:t[4]||(t[4]=t=>e.$emit("delete")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"trash-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.deleteBtn")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:5,type:"warning",onClick:t[5]||(t[5]=e=>s.startEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"edit",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.edit")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:6,type:"info",onClick:t[6]||(t[6]=e=>s.openRenameDialog()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"i-cursor",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.rename")),1)]),_:1})),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:7,type:"success",onClick:t[7]||(t[7]=e=>s.saveMetadata()),round:"",size:"small",class:"detail-action",loading:n.editSaving},{default:(0,c.k6)(()=>[n.editSaving?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"save",style:{"margin-right":"3px"}})),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.save")),1)]),_:1},8,["loading"])):(0,c.Q3)("",!0),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:8,onClick:t[8]||(t[8]=e=>s.cancelEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.cancel")),1)]),_:1})):(0,c.Q3)("",!0)]),(0,c.bF)(p,{modelValue:n.activeTab,"onUpdate:modelValue":t[16]||(t[16]=e=>n.activeTab=e),onTabClick:s.handleTabClick,style:{"margin-bottom":"10px"}},{default:(0,c.k6)(()=>[(0,c.bF)(m,{label:e.$t("fileDetail.originUrl"),name:"originUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.originUrl,"onUpdate:modelValue":t[9]||(t[9]=e=>a.urls.originUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1},8,["label"]),(0,c.bF)(m,{label:"Markdown",name:"mdUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.mdUrl,"onUpdate:modelValue":t[10]||(t[10]=e=>a.urls.mdUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"HTML",name:"htmlUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.htmlUrl,"onUpdate:modelValue":t[11]||(t[11]=e=>a.urls.htmlUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"BBCode",name:"bbUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.bbUrl,"onUpdate:modelValue":t[12]||(t[12]=e=>a.urls.bbUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),a.file?.metadata?.TgFileId?((0,c.uX)(),(0,c.Wv)(m,{key:0,label:"TG File ID",name:"tgId"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.tgId,"onUpdate:modelValue":t[13]||(t[13]=e=>a.urls.tgId=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3Location?((0,c.uX)(),(0,c.Wv)(m,{key:1,label:"S3 Location",name:"s3Location"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3Location,"onUpdate:modelValue":t[14]||(t[14]=e=>a.urls.S3Location=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3CdnFileUrl?((0,c.uX)(),(0,c.Wv)(m,{key:2,label:"S3 CDN URL",name:"s3CdnFileUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3CdnFileUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>a.urls.S3CdnFileUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0)]),_:1},8,["modelValue","onTabClick"]),(0,c.Lk)("div",Ge,[(0,c.Lk)("div",qe,[s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:0,src:a.fileLink,autoplay:"",muted:"",loop:"",class:"video-preview",onClick:t[17]||(t[17]=(...e)=>s.openImageLink&&s.openImageLink(...e))},null,8,Qe)):s.isAudio?((0,c.uX)(),(0,c.CE)("audio",{key:1,src:a.fileLink,controls:"",autoplay:"",class:"audio-preview"},null,8,Ye)):s.isImage?((0,c.uX)(),(0,c.Wv)(g,{key:2,src:a.fileLink,"preview-src-list":[a.fileLink],"preview-teleported":!0,fit:"contain",lazy:"",class:"image-preview"},null,8,["src","preview-src-list"])):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"file-icon-detail"}))])]),(0,c.bF)(k,{border:"",column:s.descColumn},{default:(0,c.k6)(()=>[(0,c.bF)(b,{label:e.$t("fileDetail.fileNameLabel")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileName,"onUpdate:modelValue":t[18]||(t[18]=e=>n.editForm.FileName=e),size:"small",placeholder:e.$t("fileDetail.fileNamePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",Je,(0,h.v_)(a.file?.metadata?.FileName||a.file?.name),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileType")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileType,"onUpdate:modelValue":t[19]||(t[19]=e=>n.editForm.FileType=e),size:"small",placeholder:e.$t("fileDetail.fileTypePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",et,(0,h.v_)(a.file?.metadata?.FileType||e.$t("fileDetail.unknown")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileSizeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.fileSizeDisplay),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.imageDimensions")},{default:(0,c.k6)(()=>[s.imageDimensions?((0,c.uX)(),(0,c.CE)("div",tt,[(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Width)+" × "+(0,h.v_)(a.file?.metadata?.Height),1),(0,c.bF)(v,{size:"small",type:"info",style:{display:"inline-flex","align-items":"center","justify-content":"center"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.orientationIcon),1)]),_:1})])):((0,c.uX)(),(0,c.CE)("span",at,(0,h.v_)(e.$t("fileDetail.noDimensions")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadTimeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.uploadTime),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.channelTypeAndName")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:"info",style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.Channel||e.$t("fileDetail.unknown")),1)]),_:1}),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.ChannelName||"-"),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.accessStatusAndReview")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:s.accessTagType,style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.accessType),1)]),_:1},8,["type"]),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Label||e.$t("fileDetail.noTags")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadIP")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadIP||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadAddressLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadAddress||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileTags")},{default:(0,c.k6)(()=>[a.file?.metadata?.Tags&&a.file?.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",it,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.file?.metadata?.Tags,e=>((0,c.uX)(),(0,c.Wv)(v,{key:e,size:"small"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1024))),128))])):((0,c.uX)(),(0,c.CE)("span",nt,(0,h.v_)(e.$t("fileDetail.noTags")),1))]),_:1},8,["label"])]),_:1},8,["column"]),(0,c.bF)(_,{modelValue:n.showRenameDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showRenameDialog=e),title:e.$t("fileDetail.renameTitle"),width:s.dialogWidth,"append-to-body":""},{footer:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:t[21]||(t[21]=e=>s.closeRenameDialog())},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameCancel")),1)]),_:1}),(0,c.bF)(u,{type:"primary",onClick:t[22]||(t[22]=e=>s.submitRename()),loading:n.renameSaving,disabled:!n.renameValidation.valid},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameConfirm")),1)]),_:1},8,["loading","disabled"])]),default:(0,c.k6)(()=>[(0,c.bF)(w,{onSubmit:(0,B.D$)(s.submitRename,["prevent"])},{default:(0,c.k6)(()=>[(0,c.bF)(y,{label:e.$t("fileDetail.renameLabel"),error:n.renameValidation.error},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:n.renameForm.newFileId,"onUpdate:modelValue":t[20]||(t[20]=e=>n.renameForm.newFileId=e),placeholder:e.$t("fileDetail.renamePlaceholder"),onInput:s.validateRenameInput,clearable:""},null,8,["modelValue","placeholder","onInput"])]),_:1},8,["label","error"])]),_:1},8,["onSubmit"])]),_:1},8,["modelValue","title","width"])]),_:1},8,["title","modelValue","width"])}const rt=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;function ot(e,t){return e&&""!==e.trim()?e===t?{valid:!1,error:"文件名未发生变化"}:e.includes("..")?{valid:!1,error:'文件名不能包含路径穿越字符 ".."'}:/\/\.\//.test(e)||/^\.\//.test(e)?{valid:!1,error:'文件名不能包含单独的 "." 路径段'}:rt.test(e)?{valid:!1,error:"文件名包含非法字符,请使用合法的文件名格式"}:e.includes("//")?{valid:!1,error:"文件名不能包含连续的斜杠"}:{valid:!0}:{valid:!1,error:"文件名不能为空"}}var lt={name:"FileDetailDialog",props:{modelValue:{type:Boolean,default:!1},file:{type:Object,default:null},fileLink:{type:String,default:""},urls:{type:Object,default:()=>({originUrl:"",mdUrl:"",htmlUrl:"",bbUrl:"",tgId:"",S3Location:"",S3CdnFileUrl:""})}},emits:["update:modelValue","download","tagManagement","block","white","delete","metadataUpdated","fileRenamed"],watch:{visible(e){e||(this.isEditing=!1,this.editSaving=!1)}},data(){return{activeTab:"originUrl",isEditing:!1,editForm:{FileName:"",FileType:""},editSaving:!1,showRenameDialog:!1,renameForm:{newFileId:""},renameValidation:{valid:!0,error:""},renameSaving:!1}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"95%":"900px"},descColumn(){return window.innerWidth<768?1:2},isVideo(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},uploadTime(){return this.file?.metadata?.TimeStamp?new Date(this.file.metadata.TimeStamp).toLocaleString():this.$t("fileDetail.unknown")},accessType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?this.$t("fileDetail.accessNormalWhitelist"):"Block"===e?this.$t("fileDetail.accessBlockedBlacklist"):"adult"===t?this.$t("fileDetail.accessBlockedReview"):this.$t("fileDetail.accessNormal")},accessTagType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?"success":"Block"===e||"adult"===t?"danger":"success"},imageDimensions(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;return!(!e||!t)||null},orientationIcon(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;if(!e||!t)return"";const a=e/t;return a>1.1?this.$t("fileDetail.orientationLandscape"):a<.9?this.$t("fileDetail.orientationPortrait"):this.$t("fileDetail.orientationSquare")},fileSizeDisplay(){const e=this.file?.metadata?.FileSizeBytes,t=this.file?.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(2)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:this.$t("fileDetail.unknown")}},methods:{handleVideoClick(e){const t=e.target;t.paused?t.play():t.pause()},handleTabClick(){},handleUrlClick(e){const t=e.target;t.select(),navigator.clipboard.writeText(t.value).then(()=>{ye.nk.success(this.$t("fileDetail.linkCopied"))})},openImageLink(){this.fileLink&&window.open(this.fileLink,"_blank")},startEdit(){this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.isEditing=!0},cancelEdit(){this.isEditing=!1,this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.editSaving=!1},async saveMetadata(){this.editSaving=!0;try{const e=this.file.name,t=await(0,D.A)(`/api/manage/metadata/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({FileName:this.editForm.FileName,FileType:this.editForm.FileType})});if(!t.ok){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.metadataSaveFailed"))}{const a=await t.json();ye.nk.success(this.$t("fileDetail.metadataSaved")),this.isEditing=!1,this.$emit("metadataUpdated",e,a.metadata)}}catch(e){console.error("Error saving metadata:",e),ye.nk.error(e.message||this.$t("fileDetail.metadataSaveFailed"))}finally{this.editSaving=!1}},openRenameDialog(){this.renameForm.newFileId=this.file?.name||"",this.renameValidation={valid:!0,error:""},this.showRenameDialog=!0},closeRenameDialog(){this.showRenameDialog=!1,this.renameForm.newFileId="",this.renameValidation={valid:!0,error:""}},validateRenameInput(){const e=ot(this.renameForm.newFileId,this.file?.name||"");this.renameValidation={valid:e.valid,error:e.error||""}},async submitRename(){if(!this.renameSaving&&(this.validateRenameInput(),this.renameValidation.valid)){this.renameSaving=!0;try{const e=this.file.name,t=await(0,D.A)(`/api/manage/rename/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newFileId:this.renameForm.newFileId})});if(t.ok){const a=await t.json();ye.nk.success(this.$t("fileDetail.renameSuccess")),this.showRenameDialog=!1,this.$emit("fileRenamed",e,this.renameForm.newFileId,a.metadata)}else{if(409!==t.status){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.renameFailed"))}this.renameValidation={valid:!1,error:this.$t("fileDetail.renameConflict")}}}catch(e){console.error("Error renaming file:",e),ye.nk.error(e.message||this.$t("fileDetail.renameFailed"))}finally{this.renameSaving=!1}}}}};const dt=(0,I.A)(lt,[["render",st],["__scopeId","data-v-550287cc"]]);var ct=dt,ht=a(78507);a(213);const ut={key:0,class:"batch-floating-bar"},ft={class:"batch-selection-summary"},mt={class:"batch-selection-count"},pt={class:"batch-floating-actions"};function gt(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=l.S2,d=ht.R7;return(0,c.uX)(),(0,c.Wv)(B.eB,{name:"batch-toolbar"},{default:(0,c.k6)(()=>[a.selectedCount>0?((0,c.uX)(),(0,c.CE)("div",ut,[(0,c.bF)(d,{disabled:s.disableTooltip,content:e.$t("dashboard.clearSelection"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:"batch-floating-btn ghost","aria-label":e.$t("dashboard.clearSelection"),onClick:s.handleClear},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"times",class:"batch-floating-icon"})]),_:1},8,["aria-label","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:s.disableTooltip,content:`${a.selectedCount} ${e.$t("dashboard.selectedItems")}`,placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ft,[(0,c.Lk)("span",mt,(0,h.v_)(a.selectedCount),1)])]),_:1},8,["disabled","content"]),t[0]||(t[0]=(0,c.Lk)("span",{class:"batch-toolbar-divider"},null,-1)),(0,c.Lk)("div",pt,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.actions,t=>((0,c.uX)(),(0,c.Wv)(d,{key:t.command,disabled:s.disableTooltip,content:e.$t(t.label),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:(0,h.C4)(["batch-floating-btn",t.className]),"aria-label":e.$t(t.label),onClick:e=>s.handleAction(t.command)},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:t.icon,class:"batch-floating-icon"},null,8,["icon"])]),_:2},1032,["class","aria-label","onClick"])]),_:2},1032,["disabled","content"]))),128))])])):(0,c.Q3)("",!0)]),_:1})}var bt={name:"BatchActionBar",props:{selectedCount:{type:Number,required:!0}},emits:["action","clear"],data(){return{actions:[{command:"copy",label:"dashboard.copy",icon:"copy",className:"copy"},{command:"download",label:"dashboard.download",icon:"download",className:"download"},{command:"move",label:"dashboard.move",icon:"file-export",className:"move"},{command:"tagManagement",label:"dashboard.tagManagement",icon:"tags",className:"tag"},{command:"ban",label:"dashboard.addToBlacklist",icon:"ban",className:"ban"},{command:"white",label:"dashboard.addToWhitelist",icon:"shield-alt",className:"white"},{command:"delete",label:"dashboard.delete",icon:"trash-alt",className:"danger"}]}},computed:{disableTooltip(){return window.innerWidth<768}},methods:{handleAction(e){this.$emit("action",e)},handleClear(){this.$emit("clear")}}};const vt=(0,I.A)(bt,[["render",gt],["__scopeId","data-v-49301bcc"]]);var kt=vt,yt=a(54880),wt=(a(4318),a(77815)),_t=(a(72907),a(98469));a(38736);const Ft={class:"list-col list-col-checkbox"},Ct=["src"],Tt=["src"],St=["title"],Lt={class:"filename-start"},$t={class:"filename-end"},xt={class:"list-col list-col-tags"},Et={key:1,class:"list-empty"},Dt={class:"list-col list-col-channel"},At={class:"list-col list-col-channel-name"},It={key:0,class:"channel-name-box"},zt={key:1,class:"list-empty"},Ut={class:"list-col list-col-address"},Bt={key:0,class:"address-box"},Pt={key:1,class:"list-empty"},Wt={class:"list-col list-col-size"},Rt={class:"list-col list-col-date"},Nt={class:"list-col list-col-actions"};function Ot(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7;return(0,c.uX)(),(0,c.CE)("div",{class:"list-item",onTouchstart:t[10]||(t[10]=t=>e.$emit("touchstart",t)),onTouchend:t[11]||(t[11]=t=>e.$emit("touchend",t)),onTouchmove:t[12]||(t[12]=t=>e.$emit("touchmove",t))},[(0,c.Lk)("div",Ft,[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onClick:t[1]||(t[1]=(0,B.D$)(()=>{},["stop"])),onChange:s.handleSelectChange},null,8,["modelValue","onChange"])]),(0,c.Lk)("div",{class:"list-col list-col-preview",onClick:t[2]||(t[2]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[s.isFolder?((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"folder-open",class:"list-folder-icon"})):s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:1,src:a.fileLink,class:"list-preview-img",muted:"",preload:"metadata"},null,8,Ct)):s.isImage?((0,c.uX)(),(0,c.CE)("img",{key:2,src:a.fileLink,class:"list-preview-img",loading:"lazy",decoding:"async"},null,8,Tt)):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"list-file-icon"}))]),(0,c.Lk)("div",{class:"list-col list-col-name",onClick:t[3]||(t[3]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[(0,c.Lk)("span",{class:"filename-ellipsis",title:s.displayName},[(0,c.Lk)("span",Lt,(0,h.v_)(s.fileNameStart),1),(0,c.Lk)("span",$t,(0,h.v_)(s.fileNameEnd),1)],8,St)]),(0,c.Lk)("div",xt,[!s.isFolder&&a.item.metadata?.Tags&&a.item.metadata.Tags.length>0?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.item.metadata.Tags.slice(0,3),(e,t)=>((0,c.uX)(),(0,c.CE)("span",{key:t,class:"color-tag",style:(0,h.Tr)({background:s.getTagColor(t)})},(0,h.v_)(e),5))),128)),a.item.metadata.Tags.length>3?((0,c.uX)(),(0,c.CE)("span",{key:0,class:"color-tag color-tag-more",style:(0,h.Tr)({background:s.getTagColor(3)})},"+"+(0,h.v_)(a.item.metadata.Tags.length-3),5)):(0,c.Q3)("",!0)],64)):((0,c.uX)(),(0,c.CE)("span",Et,"-"))]),(0,c.Lk)("div",Dt,(0,h.v_)(s.isFolder?"-":a.item.metadata?.Channel||a.item.channelTag||"-"),1),(0,c.Lk)("div",At,[!s.isFolder&&a.item.metadata?.ChannelName?((0,c.uX)(),(0,c.CE)("div",It,(0,h.v_)(a.item.metadata.ChannelName),1)):((0,c.uX)(),(0,c.CE)("span",zt,"-"))]),(0,c.Lk)("div",Ut,[!s.isFolder&&a.item.metadata?.UploadIP?((0,c.uX)(),(0,c.CE)("div",Bt,(0,h.v_)(a.item.metadata.UploadIP),1)):((0,c.uX)(),(0,c.CE)("span",Pt,"-"))]),(0,c.Lk)("div",Wt,(0,h.v_)(s.isFolder?"-":s.fileSizeDisplay),1),(0,c.Lk)("div",Rt,(0,h.v_)(s.uploadDate),1),(0,c.Lk)("div",Nt,[s.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.bF)(l,{content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[7]||(t[7]=(0,B.D$)(t=>e.$emit("folderCopy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[8]||(t[8]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["content"])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.bF)(l,{content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.downloadFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[6]||(t[6]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["content"])],64)),(0,c.bF)(l,{content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn list-action-danger",onClick:t[9]||(t[9]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["content"])])],32)}var Mt={name:"FileListItem",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,default:""}},emits:["update:selected","enter","detail","copy","folderCopy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,tagColors:["#f472b6","#a78bfa","#60a5fa","#34d399"]}},computed:{isFolder(){return this.item.isFolder||this.item.name?.endsWith("/")},isVideo(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".mp4")||e.endsWith(".webm")||e.endsWith(".mov")||e.endsWith(".avi")},isImage(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".jpg")||e.endsWith(".jpeg")||e.endsWith(".png")||e.endsWith(".gif")||e.endsWith(".webp")||e.endsWith(".svg")||e.endsWith(".bmp")},displayName(){if(this.isFolder){const e=this.item.name.split("/").filter(Boolean);return e[e.length-1]||this.item.name}return this.item.metadata?.FileName||this.getFileName(this.item.name)},fileNameStart(){const e=this.displayName;return e.length<=20?e:e.slice(0,-8)},fileNameEnd(){const e=this.displayName;return e.length<=20?"":e.slice(-8)},uploadDate(){return this.item.uploaded?new Date(this.item.uploaded).toLocaleDateString():this.item.metadata?.TimeStamp?new Date(this.item.metadata.TimeStamp).toLocaleDateString():"-"},fileSizeDisplay(){const e=this.item.metadata?.FileSizeBytes,t=this.item.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:"-"}},watch:{selected(e){this.localSelected=e}},methods:{handleSelectChange(e){this.localSelected=e,this.$emit("update:selected",e)},handlePreviewClick(){this.isFolder?this.$emit("enter"):this.$emit("detail")},getFileName(e){const t=(e||"").split("/");return t[t.length-1]},getTagColor(e){return this.tagColors[e%this.tagColors.length]}}};const Vt=(0,I.A)(Mt,[["render",Ot],["__scopeId","data-v-25a3242c"]]);var Xt=Vt,jt=a(70683);a(95385);const Kt={class:"file-short-info"},Zt={key:0,class:"success-tag"},Ht={key:1,class:"fail-tag"},Gt={key:2,class:"success-tag"},qt={key:3,class:"primary-tag"},Qt={key:0,style:{"margin-left":"2px"}},Yt={key:0,class:"skeleton-wrapper"},Jt={class:"error-text"},ea=["src"],ta={class:"error-text"},aa={key:3,class:"file-preview"},ia={class:"card-bottom-overlay"},na={class:"file-name-row"},sa={class:"file-name"},ra={class:"action-bar"},oa={class:"action-bar-left"},la={class:"action-bar-right"};function da(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=Ze.Zq,d=ht.R7,u=jt.Ik;return(0,c.uX)(),(0,c.Wv)(u,{class:"img-card",onTouchstart:t[17]||(t[17]=t=>e.$emit("touchstart",t)),onTouchend:t[18]||(t[18]=t=>e.$emit("touchend",t)),onTouchmove:t[19]||(t[19]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",Kt,["White"===a.item.metadata?.ListType?((0,c.uX)(),(0,c.CE)("div",Zt,(0,h.v_)(s.channelTag),1)):"Block"===a.item.metadata?.ListType||"adult"===a.item.metadata?.Label?((0,c.uX)(),(0,c.CE)("div",Ht,(0,h.v_)(s.channelTag),1)):((0,c.uX)(),(0,c.CE)("div",Gt,(0,h.v_)(s.channelTag),1)),a.item.metadata?.Tags&&a.item.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",qt,[(0,c.bF)(o,{icon:"tag",style:{"margin-right":"3px","font-size":"12px"}}),(0,c.eW)(" "+(0,h.v_)(a.item.metadata.Tags[0])+" ",1),a.item.metadata.Tags.length>1?((0,c.uX)(),(0,c.CE)("span",Qt," (+"+(0,h.v_)(a.item.metadata.Tags.length-1)+") ",1)):(0,c.Q3)("",!0)])):(0,c.Q3)("",!0)]),s.isVideo?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[n.videoLoading?((0,c.uX)(),(0,c.CE)("div",Yt)):n.videoError?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"error-wrapper",onClick:t[2]||(t[2]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"exclamation-triangle",class:"error-icon"}),(0,c.Lk)("span",Jt,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])):(0,c.Q3)("",!0),(0,c.bo)((0,c.Lk)("video",{src:a.fileLink,muted:"",loop:"",preload:"metadata",class:"video-preview",onClick:t[3]||(t[3]=(...e)=>s.handleVideoClick&&s.handleVideoClick(...e)),onMouseenter:t[4]||(t[4]=e=>s.handleVideoHover(e,!0)),onMouseleave:t[5]||(t[5]=e=>s.handleVideoHover(e,!1)),onFullscreenchange:t[6]||(t[6]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onWebkitfullscreenchange:t[7]||(t[7]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onLoadeddata:t[8]||(t[8]=e=>n.videoLoading=!1),onError:t[9]||(t[9]=(...e)=>s.handleVideoError&&s.handleVideoError(...e))},null,40,ea),[[B.aG,!n.videoLoading&&!n.videoError]])],64)):s.isAudio?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"file-preview audio-card-preview",onClick:t[10]||(t[10]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"music",class:"file-icon audio-icon"})])):s.isImage?((0,c.uX)(),(0,c.Wv)(l,{key:2,"preview-teleported":!0,src:a.fileLink,"preview-src-list":a.previewSrcList,fit:"cover",lazy:"",decoding:"async",class:"image-preview"},{placeholder:(0,c.k6)(()=>[...t[20]||(t[20]=[(0,c.Lk)("div",{class:"skeleton-wrapper"},null,-1)])]),error:(0,c.k6)(()=>[(0,c.Lk)("div",{class:"error-wrapper",onClick:t[11]||(t[11]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"image",class:"error-icon"}),(0,c.Lk)("span",ta,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])]),_:1},8,["src","preview-src-list"])):((0,c.uX)(),(0,c.CE)("div",aa,[(0,c.bF)(o,{icon:"file",class:"file-icon"})])),(0,c.Lk)("div",ia,[(0,c.Lk)("div",na,[(0,c.Lk)("span",sa,(0,h.v_)(s.displayName),1)]),(0,c.Lk)("div",ra,[(0,c.Lk)("div",oa,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.detail"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[12]||(t[12]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"info-circle"})])]),_:1},8,["disabled","content"])]),(0,c.Lk)("div",la,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[13]||(t[13]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[14]||(t[14]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.downloadFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[15]||(t[15]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[16]||(t[16]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"])])])])]),_:1})}var ca={name:"FileCard",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,required:!0},previewSrcList:{type:Array,default:()=>[]},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","detail","copy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,videoLoading:!0,videoError:!1}},computed:{channelTag(){return this.item.channelTag||""},isVideo(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},displayName(){const e=this.item.metadata?.FileName||this.item.name||"",t=e.split("/");return t[t.length-1]}},watch:{selected(e){this.localSelected=e},fileLink(){this.videoLoading=!0,this.videoError=!1}},methods:{handleVideoError(){this.videoLoading=!1,this.videoError=!0},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleFullscreenChange(e){const t=e.target,a=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;a?(t.muted=!1,t.loop=!1):(t.muted=!0,t.loop=!0,t.pause(),t.currentTime=0)},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)}}};const ha=(0,I.A)(ca,[["render",da],["__scopeId","data-v-956fb02e"]]);var ua=ha;const fa={class:"card-bottom-overlay"},ma={class:"file-name-row"},pa={class:"file-name"},ga={key:0,class:"action-bar"},ba={class:"action-bar-right"};function va(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7,d=jt.Ik;return(0,c.uX)(),(0,c.Wv)(d,{class:"img-card folder-card",onTouchstart:t[6]||(t[6]=t=>e.$emit("touchstart",t)),onTouchend:t[7]||(t[7]=t=>e.$emit("touchend",t)),onTouchmove:t[8]||(t[8]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",{class:"folder-icon",onClick:t[2]||(t[2]=t=>e.$emit("enter"))},[(0,c.bF)(o,{icon:"folder-open",class:"folder-icon-svg"})]),(0,c.Lk)("div",fa,[(0,c.Lk)("div",ma,[(0,c.Lk)("span",pa,(0,h.v_)(s.folderName),1)]),a.showActions?((0,c.uX)(),(0,c.CE)("div",ga,[t[9]||(t[9]=(0,c.Lk)("div",{class:"action-bar-left"},null,-1)),(0,c.Lk)("div",ba,[(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"])])])):(0,c.Q3)("",!0)])]),_:1})}var ka={name:"FolderCard",props:{name:{type:String,required:!0},selected:{type:Boolean,default:!1},showActions:{type:Boolean,default:!0},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","enter","copy","move","delete","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected}},computed:{folderName(){const e=this.name.split("/").filter(Boolean);return e[e.length-1]||this.name}},watch:{selected(e){this.localSelected=e}}};const ya=(0,I.A)(ka,[["render",va],["__scopeId","data-v-534cf01b"]]);var wa=ya;function _a(e,t,a,i,n,s){return"card"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:0},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"skeleton-"+e,class:"skeleton-card"},[...t[0]||(t[0]=[(0,c.Lk)("div",{class:"skeleton-image"},null,-1),(0,c.Lk)("div",{class:"skeleton-info"},[(0,c.Lk)("div",{class:"skeleton-text"})],-1)])]))),128)):"list"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:1},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"list-skeleton-"+e,class:"list-item skeleton-list-item"},[...t[1]||(t[1]=[(0,c.Fv)('

',10)])]))),128)):(0,c.Q3)("",!0)}var Fa={name:"SkeletonLoader",props:{type:{type:String,default:"card",validator:e=>["card","list"].includes(e)},count:{type:Number,default:15}}};const Ca=(0,I.A)(Fa,[["render",_a],["__scopeId","data-v-070880ec"]]);var Ta=Ca,Sa=a(81095),La=a(62086),$a=(a(40670),a(88830),a(23597),a(58165));a(34396),a(3261);const xa=["aria-checked"];function Ea(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.CE)("span",{class:(0,h.C4)(["dashboard-checkbox",[`dashboard-checkbox--${a.variant}`,{checked:a.checked,indeterminate:a.indeterminate&&!a.checked}]]),role:"checkbox","aria-checked":s.ariaChecked,tabindex:"0",onClick:t[0]||(t[0]=(...e)=>s.handleClick&&s.handleClick(...e)),onKeydown:[t[1]||(t[1]=(0,B.jR)((0,B.D$)((...e)=>s.handleClick&&s.handleClick(...e),["prevent"]),["enter"])),t[2]||(t[2]=(0,B.jR)((0,B.D$)((...e)=>s.handleClick&&s.handleClick(...e),["prevent"]),["space"]))]},[(0,c.bF)(r,{icon:s.markIcon,class:"dashboard-checkbox-mark"},null,8,["icon"])],42,xa)}var Da={name:"DashboardCheckbox",props:{checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},variant:{type:String,default:"breadcrumb",validator:e=>["breadcrumb"].includes(e)}},emits:["click"],computed:{ariaChecked(){return this.checked?"true":this.indeterminate?"mixed":"false"},markIcon(){return this.indeterminate&&!this.checked?"minus":"check"}},methods:{handleClick(e){this.$emit("click",e)}}};const Aa=(0,I.A)(Da,[["render",Ea],["__scopeId","data-v-3757bfa7"]]);var Ia=Aa,za=(a(77128),a(49187),a(77788));a(72099);const Ua={class:"el-dropdown-link filter-trigger"},Ba={class:"filter-section"},Pa={class:"filter-title"},Wa={class:"filter-options"},Ra={class:"filter-section"},Na={class:"filter-title"},Oa={class:"filter-options"},Ma={class:"filter-section"},Va={class:"filter-title"},Xa={class:"filter-options"},ja={class:"filter-section"},Ka={class:"filter-title"},Za={class:"filter-options"},Ha={class:"filter-section"},Ga={class:"filter-title"},qa={class:"filter-options"},Qa={key:0,class:"filter-section"},Ya={class:"filter-title"},Ja={class:"filter-options"},ei={key:0,class:"channel-divider"},ti={class:"channel-group-title"},ai={class:"filter-actions"};function ii(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=za.z_,d=_t.dI,u=_t.o5,f=l.S2,m=La.Iy,p=La.dW;return(0,c.uX)(),(0,c.Wv)(p,{"hide-on-click":!1,trigger:"click",class:"filter-dropdown",ref:"dropdownRef"},{dropdown:(0,c.k6)(()=>[(0,c.bF)(m,{class:"filter-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ba,[(0,c.Lk)("div",Pa,(0,h.v_)(e.$t("filter.accessStatus")),1),(0,c.Lk)("div",Wa,[(0,c.bF)(u,{modelValue:n.localFilters.accessStatus,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localFilters.accessStatus=e),onChange:t[1]||(t[1]=e=>s.handleFilterChange("accessStatus"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.accessStatusOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"accessStatus-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ra,[(0,c.Lk)("div",Na,(0,h.v_)(e.$t("filter.blackWhiteList")),1),(0,c.Lk)("div",Oa,[(0,c.bF)(u,{modelValue:n.localFilters.listType,"onUpdate:modelValue":t[2]||(t[2]=e=>n.localFilters.listType=e),onChange:t[3]||(t[3]=e=>s.handleFilterChange("listType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.listTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"listType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ma,[(0,c.Lk)("div",Va,(0,h.v_)(e.$t("filter.reviewResult")),1),(0,c.Lk)("div",Xa,[(0,c.bF)(u,{modelValue:n.localFilters.label,"onUpdate:modelValue":t[4]||(t[4]=e=>n.localFilters.label=e),onChange:t[5]||(t[5]=e=>s.handleFilterChange("label"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.labelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"label-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",ja,[(0,c.Lk)("div",Ka,(0,h.v_)(e.$t("filter.fileType")),1),(0,c.Lk)("div",Za,[(0,c.bF)(u,{modelValue:n.localFilters.fileType,"onUpdate:modelValue":t[6]||(t[6]=e=>n.localFilters.fileType=e),onChange:t[7]||(t[7]=e=>s.handleFilterChange("fileType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.fileTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"fileType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ha,[(0,c.Lk)("div",Ga,(0,h.v_)(e.$t("filter.channelType")),1),(0,c.Lk)("div",qa,[(0,c.bF)(u,{modelValue:n.localFilters.channel,"onUpdate:modelValue":t[8]||(t[8]=e=>n.localFilters.channel=e),onChange:t[9]||(t[9]=e=>s.handleFilterChange("channel"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.channelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channel-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),a.channelNameOptions.length>0?((0,c.uX)(),(0,c.CE)("div",Qa,[(0,c.Lk)("div",Ya,(0,h.v_)(e.$t("filter.channelName")),1),(0,c.Lk)("div",Ja,[(0,c.bF)(u,{modelValue:n.localFilters.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>n.localFilters.channelName=e),onChange:t[11]||(t[11]=e=>s.handleFilterChange("channelName"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.groupedChannelNames,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:"group-"+e.type},[t>0?((0,c.uX)(),(0,c.CE)("div",ei)):(0,c.Q3)("",!0),(0,c.Lk)("div",ti,(0,h.v_)(e.typeLabel),1),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(e.channels,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channelName-"+e.type+"-"+e.name,label:e.type+":"+e.name},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.name),1)]),_:2},1032,["label"]))),128))],64))),128))]),_:1},8,["modelValue"])])])):(0,c.Q3)("",!0),(0,c.Lk)("div",ai,[(0,c.bF)(f,{size:"small",onClick:s.clearFilters,disabled:0===s.activeFilterCount},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("filter.clearFilters")),1)]),_:1},8,["onClick","disabled"])])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",Ua,[(0,c.bF)(o,{value:s.activeFilterCount,hidden:0===s.activeFilterCount,class:"filter-badge"},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"filter",class:"header-icon"})]),_:1},8,["value","hidden"])])]),_:1},512)}a(7588),a(18237);var ni={name:"FilterDropdown",props:{filters:{type:Object,default:()=>({accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]})},channelNameOptions:{type:Array,default:()=>[]}},emits:["update:filters","change"],data(){return{localFilters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]}}},computed:{accessStatusOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.blocked"),value:"blocked"}]},listTypeOptions(){return[{label:this.$t("filter.whiteList"),value:"White"},{label:this.$t("filter.blackList"),value:"Block"},{label:this.$t("filter.notSet"),value:"None"}]},labelOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.teenContent"),value:"teen"},{label:this.$t("filter.adultContent"),value:"adult"}]},fileTypeOptions(){return[{label:this.$t("filter.image"),value:"image"},{label:this.$t("filter.video"),value:"video"},{label:this.$t("filter.audio"),value:"audio"},{label:this.$t("filter.other"),value:"other"}]},channelOptions(){return[{label:"Telegram",value:"TelegramNew"},{label:"Cloudflare R2",value:"CloudflareR2"},{label:"S3",value:"S3"},{label:"Discord",value:"Discord"},{label:"HuggingFace",value:"HuggingFace"},{label:"WebDAV",value:"WebDAV"},{label:this.$t("filter.externalLink"),value:"External"}]},activeFilterCount(){return Object.values(this.localFilters).reduce((e,t)=>e+t.length,0)},groupedChannelNames(){const e={};return this.channelNameOptions.forEach(t=>{e[t.type]||(e[t.type]={type:t.type,typeLabel:t.typeLabel,channels:[]}),e[t.type].channels.push(t)}),Object.values(e)}},watch:{filters:{handler(e){this.localFilters={accessStatus:Array.isArray(e.accessStatus)?[...e.accessStatus]:[],listType:Array.isArray(e.listType)?[...e.listType]:[],label:Array.isArray(e.label)?[...e.label]:[],fileType:Array.isArray(e.fileType)?[...e.fileType]:[],channel:Array.isArray(e.channel)?[...e.channel]:[],channelName:Array.isArray(e.channelName)?[...e.channelName]:[]}},immediate:!0,deep:!0}},methods:{handleFilterChange(e){this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:e,filters:{...this.localFilters}})},clearFilters(){this.localFilters={accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:"clear",filters:{...this.localFilters}})}}};const si=(0,I.A)(ni,[["render",ii],["__scopeId","data-v-68ddb899"]]);var ri=si,oi=a(91570);const li={class:"container"},di={class:"header-content admin-header-content"},ci={class:"search-area"},hi={class:"search-card"},ui={class:"actions"},fi={class:"el-dropdown-link"},mi={class:"breadcrumb-container"},pi=["title","aria-pressed"],gi=["title","aria-pressed"],bi=["title"],vi={class:"breadcrumb-sort-icon",viewBox:"0 0 30 18","aria-hidden":"true"},ki={key:0,class:"sort-field-glyph"},yi={key:1,class:"sort-field-glyph"},wi={key:2,class:"sort-field-glyph"},_i={key:3,class:"sort-field-glyph"},Fi={key:4,class:"sort-order-glyph",d:"M23 13.5V4.5M19 8.5L23 4.5L27 8.5"},Ci={key:5,class:"sort-order-glyph",d:"M23 4.5V13.5M19 9.5L23 13.5L27 9.5"},Ti={class:"sort-order-wrapper"},Si={class:"mobile-directory-path"},Li={class:"breadcrumb desktop-only"},$i=["title"],xi={key:1,class:"empty-state"},Ei={class:"empty-text"},Di={class:"empty-hint"},Ai={class:"list-header"},Ii={class:"list-col list-col-checkbox"},zi={class:"list-col list-col-preview"},Ui={class:"list-col list-col-name"},Bi={class:"list-col list-col-tags"},Pi={class:"list-col list-col-channel"},Wi={class:"list-col list-col-channel-name"},Ri={class:"list-col list-col-address"},Ni={class:"list-col list-col-size"},Oi={class:"list-col list-col-date"},Mi={class:"list-col list-col-actions"},Vi={key:1,class:"empty-state list-empty"},Xi={class:"empty-text"},ji={class:"empty-hint"},Ki={class:"pagination-container"},Zi={class:"pagination-center"},Hi={class:"pagination-right"},Gi={class:"page-total"},qi={class:"page-jump"},Qi={class:"dialog-section"},Yi={class:"section-header"},Ji={class:"section-title"},en={class:"section-content"},tn={class:"dialog-section"},an={class:"section-header"},nn={class:"section-title"},sn={class:"section-content"},rn={class:"setting-item"},on={class:"setting-label"},ln={key:0,class:"setting-item"},dn={class:"setting-label"},cn={class:"dialog-action"};function hn(e,t,a,i,n,s){const o=oi.A,u=(0,c.g2)("font-awesome-icon"),f=d.WK,m=ri,p=ht.R7,g=yt.bZ,b=Ia,v=Xe.Zh,k=Xe.MQ,y=$a.fR,w=La.c6,_=La.Iy,F=La.dW,C=Sa.WZ,T=Sa.vp,S=Ta,L=wa,$=ua,x=_t.dI,E=Xt,D=wt.aQ,A=l.S2,I=yt.ZO,z=yt.lX,P=kt,W=ct,R=Xe.ll,N=Ve.qi,O=r.kZ,M=Me,V=Ce,j=Q,K=X,Z=U;return(0,c.uX)(),(0,c.CE)("div",li,[(0,c.bF)(z,null,{default:(0,c.k6)(()=>[(0,c.bF)(g,null,{default:(0,c.k6)(()=>[(0,c.Lk)("div",di,[(0,c.bF)(o,{activeTab:"dashboard"}),(0,c.Lk)("div",ci,[(0,c.Lk)("div",hi,[(0,c.bF)(f,{modelValue:n.tempSearch,"onUpdate:modelValue":t[0]||(t[0]=e=>n.tempSearch=e),size:"small",placeholder:e.$t("dashboard.searchPlaceholder"),onKeyup:(0,B.jR)(s.handleSearch,["enter"])},{suffix:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"search",class:"search-icon",onClick:s.handleSearch},null,8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup"])]),(0,c.bF)(m,{filters:n.filters,"onUpdate:filters":t[1]||(t[1]=e=>n.filters=e),channelNameOptions:n.channelNameOptions,onChange:s.handleFilterChange},null,8,["filters","channelNameOptions","onChange"])]),(0,c.Lk)("div",ui,[(0,c.bF)(p,{disabled:s.disableTooltip,content:e.$t("dashboard.linkFormat"),placement:"bottom","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("span",fi,[(0,c.bF)(u,{icon:"link",class:"header-icon",onClick:t[2]||(t[2]=e=>n.showUrlDialog=!0)})])]),_:1},8,["disabled","content"]),(0,c.bF)(p,{disabled:s.disableTooltip,content:e.$t("dashboard.logout"),placement:"bottom","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sign-out-alt",class:"header-icon",onClick:s.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,c.bF)(I,{class:(0,h.C4)(["main-container",{"has-batch-toolbar":n.selectedFiles.length>0}])},{default:(0,c.k6)(()=>[(0,c.Lk)("div",mi,[(0,c.bF)(b,{checked:s.selectPage,indeterminate:s.selectedPageFiles&&!s.selectPage,variant:"breadcrumb",onClick:s.handleSelectPage},null,8,["checked","indeterminate","onClick"]),(0,c.Lk)("div",{class:(0,h.C4)(["breadcrumb-view-toggle",{"is-list":"list"===n.viewMode}]),role:"group"},[(0,c.Lk)("button",{class:(0,h.C4)(["breadcrumb-view-button",{"is-active":"card"===n.viewMode}]),type:"button",title:e.$t("dashboard.cardView"),"aria-pressed":"card"===n.viewMode,onClick:t[3]||(t[3]=e=>s.setViewMode("card"))},[(0,c.bF)(u,{icon:"th-large",class:"breadcrumb-view-icon"})],10,pi),(0,c.Lk)("button",{class:(0,h.C4)(["breadcrumb-view-button",{"is-active":"list"===n.viewMode}]),type:"button",title:e.$t("dashboard.listView"),"aria-pressed":"list"===n.viewMode,onClick:t[4]||(t[4]=e=>s.setViewMode("list"))},[(0,c.bF)(u,{icon:"list",class:"breadcrumb-view-icon"})],10,gi)],2),(0,c.bF)(F,{trigger:"click",class:"breadcrumb-sort-dropdown",onCommand:s.setSortField},{dropdown:(0,c.k6)(()=>[(0,c.bF)(_,{class:"sort-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ti,[(0,c.bF)(k,{modelValue:n.sortOrder,"onUpdate:modelValue":t[5]||(t[5]=e=>n.sortOrder=e),size:"small",onChange:s.setSortOrder},{default:(0,c.k6)(()=>[(0,c.bF)(v,{label:"asc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortAsc")),1)]),_:1}),(0,c.bF)(v,{label:"desc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortDesc")),1)]),_:1})]),_:1},8,["modelValue","onChange"])]),(0,c.bF)(y,{class:"sort-divider"}),(0,c.bF)(w,{command:"time",class:(0,h.C4)({"is-selected":"time"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByTime")),1),"time"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"size",class:(0,h.C4)({"is-selected":"size"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortBySize")),1),"size"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"rawName",class:(0,h.C4)({"is-selected":"rawName"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByRawName")),1),"rawName"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"fileName",class:(0,h.C4)({"is-selected":"fileName"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByFileName")),1),"fileName"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"breadcrumb-sort-button",type:"button",title:s.sortLabel},[((0,c.uX)(),(0,c.CE)("svg",vi,["time"===n.sortField?((0,c.uX)(),(0,c.CE)("g",ki,[...t[32]||(t[32]=[(0,c.Lk)("circle",{cx:"7.5",cy:"9",r:"5.5"},null,-1),(0,c.Lk)("path",{d:"M7.5 5.5V9L10 10.5"},null,-1)])])):"size"===n.sortField?((0,c.uX)(),(0,c.CE)("g",yi,[...t[33]||(t[33]=[(0,c.Lk)("path",{d:"M2 4H13M2 9H10M2 14H7"},null,-1)])])):"rawName"===n.sortField?((0,c.uX)(),(0,c.CE)("g",wi,[...t[34]||(t[34]=[(0,c.Lk)("path",{d:"M5.5 3L4 15M11 3L9.5 15M2.5 7H13M2 11H12.5"},null,-1)])])):((0,c.uX)(),(0,c.CE)("g",_i,[...t[35]||(t[35]=[(0,c.Lk)("path",{d:"M2.5 14L7.5 3L12.5 14M4.3 10H10.7"},null,-1)])])),"asc"===n.sortOrder?((0,c.uX)(),(0,c.CE)("path",Fi)):((0,c.uX)(),(0,c.CE)("path",Ci))]))],8,bi)]),_:1},8,["onCommand"]),(0,c.Lk)("div",{class:"mobile-directory-trigger",onClick:t[6]||(t[6]=e=>n.showMobileDirectoryDrawer=!0)},[(0,c.bF)(u,{icon:"folder-open",class:"mobile-directory-icon"}),(0,c.Lk)("span",Si,(0,h.v_)(n.currentPath&&n.currentPath.split("/").filter(Boolean).length>0?n.currentPath.split("/").filter(Boolean).pop():e.$t("dashboard.rootDirectory")),1),(0,c.bF)(u,{icon:"chevron-down",class:"mobile-directory-arrow"})]),(0,c.Lk)("div",Li,[(0,c.bF)(T,{separator:"/"},{default:(0,c.k6)(()=>[(0,c.bF)(C,{onClick:t[7]||(t[7]=e=>s.navigateToFolder(""))},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"home",class:"breadcrumb-home-icon"})]),_:1}),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentPath.split("/").filter(Boolean),(e,t)=>((0,c.uX)(),(0,c.Wv)(C,{key:t,onClick:e=>s.navigateToFolder(n.currentPath.split("/").filter(Boolean).slice(0,t+1).join("/"))},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),(0,c.Lk)("span",{class:"stats-badge",title:e.$t("dashboard.totalFiles",{count:e.$data.Number})},[(0,c.bF)(u,{icon:"database",class:"stats-badge-icon"}),(0,c.eW)(" "+(0,h.v_)(n.Number),1)],8,$i)]),"card"===n.viewMode?((0,c.uX)(),(0,c.CE)("div",{key:0,class:(0,h.C4)(["content",{"is-drag-selecting":i.isDragging}]),ref:"cardContainerRef",onTouchstartPassive:t[8]||(t[8]=(...e)=>s.handlePageSwipeStart&&s.handlePageSwipeStart(...e)),onTouchendPassive:t[9]||(t[9]=(...e)=>s.handlePageSwipeEnd&&s.handlePageSwipeEnd(...e)),onTouchcancelPassive:t[10]||(t[10]=(...e)=>s.resetPageSwipe&&s.resetPageSwipe(...e))},[n.loading?((0,c.uX)(),(0,c.Wv)(S,{key:0,type:"card",count:n.pageSize},null,8,["count"])):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",xi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Ei,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",Di,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:t},[s.isFolder(e)?((0,c.uX)(),(0,c.Wv)(L,{key:0,name:e.name,selected:e.selected,"onUpdate:selected":t=>e.selected=t,showActions:!n.isSearchMode,disableTooltip:s.disableTooltip,onEnter:t=>s.enterFolder(e.name),onCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onTouchstart:a=>s.handleFolderTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["name","selected","onUpdate:selected","showActions","disableTooltip","onEnter","onCopy","onMove","onDelete","onTouchstart","onTouchend","onTouchmove"])):((0,c.uX)(),(0,c.Wv)($,{key:1,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),previewSrcList:e.previewSrcList,disableTooltip:s.disableTooltip,onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","previewSrcList","disableTooltip","onDetail","onCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))],64))),128))],34)):((0,c.uX)(),(0,c.CE)("div",{key:1,class:(0,h.C4)(["list-view",{"is-drag-selecting":i.isDragging}]),ref:"listContainerRef",onTouchstartPassive:t[12]||(t[12]=(...e)=>s.handlePageSwipeStart&&s.handlePageSwipeStart(...e)),onTouchendPassive:t[13]||(t[13]=(...e)=>s.handlePageSwipeEnd&&s.handlePageSwipeEnd(...e)),onTouchcancelPassive:t[14]||(t[14]=(...e)=>s.resetPageSwipe&&s.resetPageSwipe(...e))},[(0,c.Lk)("div",Ai,[(0,c.Lk)("div",Ii,[(0,c.bF)(x,{"model-value":s.isSelectAll,indeterminate:s.isIndeterminate,onClick:t[11]||(t[11]=(0,B.D$)(()=>{},["stop"])),onChange:s.handleSelectAllPage},null,8,["model-value","indeterminate","onChange"])]),(0,c.Lk)("div",zi,(0,h.v_)(e.$t("dashboard.preview")),1),(0,c.Lk)("div",Ui,(0,h.v_)(e.$t("dashboard.fileName")),1),(0,c.Lk)("div",Bi,(0,h.v_)(e.$t("dashboard.tags")),1),(0,c.Lk)("div",Pi,(0,h.v_)(e.$t("dashboard.channelType")),1),(0,c.Lk)("div",Wi,(0,h.v_)(e.$t("dashboard.channelNameCol")),1),(0,c.Lk)("div",Ri,(0,h.v_)(e.$t("dashboard.uploadAddress")),1),(0,c.Lk)("div",Ni,(0,h.v_)(e.$t("dashboard.fileSize")),1),(0,c.Lk)("div",Oi,(0,h.v_)(e.$t("dashboard.uploadTime")),1),(0,c.Lk)("div",Mi,(0,h.v_)(e.$t("dashboard.actions")),1)]),n.loading?((0,c.uX)(),(0,c.Wv)(S,{key:0,type:"list",count:n.pageSize},null,8,["count"])):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",Vi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Xi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",ji,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.Wv)(E,{key:t,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),onEnter:t=>s.enterFolder(e.name),onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onFolderCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.isFolder(e)?s.handleFolderTouchStart(e,t):s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","onEnter","onDetail","onCopy","onFolderCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))),128))],34)),i.isDragging?((0,c.uX)(),(0,c.CE)("div",{key:2,class:"drag-select-overlay",style:(0,h.Tr)({position:"fixed",left:i.selectionRect.left+"px",top:i.selectionRect.top+"px",width:i.selectionRect.width+"px",height:i.selectionRect.height+"px"})},null,4)):(0,c.Q3)("",!0),(0,c.Lk)("div",Ki,[(0,c.Lk)("div",Zi,[(0,c.bF)(D,{background:"",layout:"prev, pager, next",total:s.filteredTableData.length,"page-size":n.pageSize,"current-page":n.currentPage,"pager-count":s.pagerCount,onCurrentChange:s.handlePageChange},null,8,["total","page-size","current-page","pager-count","onCurrentChange"]),(0,c.bF)(A,{type:"primary",onClick:s.refreshFileList,class:"refresh-btn"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sync",class:(0,h.C4)({"fa-spin":n.refreshLoading})},null,8,["class"])]),_:1},8,["onClick"]),n.currentPage===Math.ceil(s.filteredTableData.length/n.pageSize)?((0,c.uX)(),(0,c.Wv)(A,{key:0,type:"primary",onClick:s.loadMoreData,loading:n.loading,class:"load-more"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Hi,[(0,c.Lk)("span",Gi,(0,h.v_)(e.$t("dashboard.totalPages",{count:s.realTotalPages})),1),(0,c.Lk)("div",qi,[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.jumpTo")),1),(0,c.bF)(f,{modelValue:n.jumpPage,"onUpdate:modelValue":t[15]||(t[15]=e=>n.jumpPage=e),size:"small",class:"jump-input",onKeyup:(0,B.jR)(s.handleJumpPage,["enter"])},null,8,["modelValue","onKeyup"]),(0,c.bF)(A,{size:"small",type:"primary",onClick:s.handleJumpPage,class:"jump-btn"},{default:(0,c.k6)(()=>[...t[36]||(t[36]=[(0,c.eW)("GO",-1)])]),_:1},8,["onClick"])])])])]),_:1},8,["class"])]),_:1}),(0,c.bF)(P,{"selected-count":n.selectedFiles.length,onAction:s.handleBatchAction,onClear:s.clearSelection},null,8,["selected-count","onAction","onClear"]),(0,c.bF)(W,{modelValue:n.showdetailDialog,"onUpdate:modelValue":t[16]||(t[16]=e=>n.showdetailDialog=e),file:n.detailFile,fileLink:s.getFileLink(n.detailFile?.name),urls:s.allUrl,onDownload:t[17]||(t[17]=e=>s.handleDownload(n.detailFile?.name)),onTagManagement:t[18]||(t[18]=e=>s.handleTagManagement(n.detailFile?.name)),onBlock:t[19]||(t[19]=e=>s.handleBlock(n.detailFile?.name)),onWhite:t[20]||(t[20]=e=>s.handleWhite(n.detailFile?.name)),onDelete:t[21]||(t[21]=e=>s.handleDetailDelete(n.detailFile?.name)),onMetadataUpdated:s.handleMetadataUpdated,onFileRenamed:s.handleFileRenamed},null,8,["modelValue","file","fileLink","urls","onMetadataUpdated","onFileRenamed"]),(0,c.bF)(O,{title:e.$t("dashboard.linkFormat"),modelValue:n.showUrlDialog,"onUpdate:modelValue":t[26]||(t[26]=e=>n.showUrlDialog=e),width:s.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Qi,[(0,c.Lk)("div",Yi,[(0,c.Lk)("span",Ji,(0,h.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,c.Lk)("div",en,[(0,c.bF)(k,{modelValue:n.defaultUrlFormat,"onUpdate:modelValue":t[22]||(t[22]=e=>n.defaultUrlFormat=e),class:"radio-card-group grid-2x2"},{default:(0,c.k6)(()=>[(0,c.bF)(R,{label:"originUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"link",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,c.bF)(R,{label:"mdUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code",class:"radio-icon"}),t[37]||(t[37]=(0,c.Lk)("span",null,"Markdown",-1))]),_:1}),(0,c.bF)(R,{label:"htmlUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[38]||(t[38]=(0,c.Lk)("span",null,"HTML",-1))]),_:1}),(0,c.bF)(R,{label:"bbUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[39]||(t[39]=(0,c.Lk)("span",null,"BBCode",-1))]),_:1}),(0,c.bF)(R,{label:"tgId",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"paper-plane",class:"radio-icon"}),t[40]||(t[40]=(0,c.Lk)("span",null,"TG File ID",-1))]),_:1}),(0,c.bF)(R,{label:"s3Location",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"cloud",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.s3Link")),1)]),_:1})]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",tn,[(0,c.Lk)("div",an,[(0,c.Lk)("span",nn,(0,h.v_)(e.$t("settings.customLink")),1),(0,c.bF)(p,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,c.Lk)("div",sn,[(0,c.Lk)("div",rn,[(0,c.Lk)("span",on,(0,h.v_)(e.$t("settings.enableCustom")),1),(0,c.bF)(N,{modelValue:n.useCustomUrl,"onUpdate:modelValue":t[23]||(t[23]=e=>n.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===n.useCustomUrl?((0,c.uX)(),(0,c.CE)("div",ln,[(0,c.Lk)("span",dn,(0,h.v_)(e.$t("settings.customPrefix")),1),(0,c.bF)(f,{modelValue:n.customUrlPrefix,"onUpdate:modelValue":t[24]||(t[24]=e=>n.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,c.Q3)("",!0)])]),(0,c.Lk)("div",cn,[(0,c.bF)(A,{type:"primary",onClick:t[25]||(t[25]=e=>n.showUrlDialog=!1),class:"confirm-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,c.bF)(M,{modelValue:n.showTagDialog,"onUpdate:modelValue":t[27]||(t[27]=e=>n.showTagDialog=e),fileId:n.currentTagFile,onTagsUpdated:s.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,c.bF)(V,{modelValue:n.showBatchTagDialog,"onUpdate:modelValue":t[28]||(t[28]=e=>n.showBatchTagDialog=e),selectedFiles:n.selectedFiles,onTagsUpdated:s.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,c.bF)(j,{modelValue:n.showMobileActionModal,"onUpdate:modelValue":t[29]||(t[29]=e=>n.showMobileActionModal=e),title:n.mobileActionIsFolder?s.getFolderName(n.mobileActionFile?.name||""):n.mobileActionFile?.metadata?.FileName||s.getFileName(n.mobileActionFile?.name||""),isFolder:n.mobileActionIsFolder,onAction:s.handleMobileAction},null,8,["modelValue","title","isFolder","onAction"]),(0,c.bF)(K,{modelValue:n.showMobileDirectoryDrawer,"onUpdate:modelValue":t[30]||(t[30]=e=>n.showMobileDirectoryDrawer=e),currentPath:n.currentPath,onNavigate:s.navigateToFolder,onGoBack:s.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"]),(0,c.bF)(Z,{modelValue:n.showMoveDialog,"onUpdate:modelValue":t[31]||(t[31]=e=>n.showMoveDialog=e),"current-directory":n.currentPath,"is-batch-move":n.isBatchMove,"initial-path":n.moveTargetPath,onConfirm:s.confirmMove},null,8,["modelValue","current-directory","is-batch-move","initial-path","onConfirm"])])}a(81148),a(20116),a(13579),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698);var un=a(60782),fn=a(44813),mn=a.n(fn),pn=a(54047),gn=a(46638);class bn{constructor(){this.FILE_LIST_PATH="data/fileList.json",this.fileListCache=null,this.storageWarningShown=!1}getLocalFileList(){const e=this.getMutableFileList();return{...e,files:[...e.files||[]],directories:[...e.directories||[]]}}getMutableFileList(){if(this.fileListCache)return this.fileListCache;try{const e=localStorage.getItem(this.FILE_LIST_PATH);return this.fileListCache=e?JSON.parse(e):this.createEmptyFileList(),this.fileListCache}catch(e){return console.error("Error reading local file list:",e),this.fileListCache=this.createEmptyFileList(),this.fileListCache}}updateFileListCache(e){this.fileListCache=e||this.createEmptyFileList();const t=this.persistFileListCache();return{cacheUpdated:!0,persisted:t}}persistFileListCache(){try{return localStorage.setItem(this.FILE_LIST_PATH,JSON.stringify(this.fileListCache)),!0}catch(e){return this.handleStoragePersistError(e),!1}}createEmptyFileList(){return{files:[],directories:[]}}handleStoragePersistError(e){console.warn("File list is kept in memory because localStorage persistence failed:",e);try{localStorage.removeItem(this.FILE_LIST_PATH)}catch(t){console.warn("Failed to remove stale file list cache:",t)}this.storageWarningShown||(this.storageWarningShown=!0,ye.nk.warning(gn.Ay.global.t("dashboard.fileListMemoryCacheWarning")))}addFile(e){try{const t=this.getMutableFileList();return t.files.push(e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error adding file:",t),!1}}addFolder(e){try{const t=this.getMutableFileList();return!t.directories.includes(e)&&(t.directories.push(e),this.updateFileListCache(t).cacheUpdated)}catch(t){return console.error("Error adding folder:",t),!1}}moveFile(e,t,a=!1,i=""){try{let n=this.getMutableFileList();if(a){const t=n.directories.indexOf(e);-1!==t&&n.directories.splice(t,1)}else{const t=n.files.findIndex(t=>t.name===e);-1!==t&&n.files.splice(t,1)}if(t.startsWith(i)){const e=t.substring(i.length).split("/");if(e.length>1){const t=i+e[0];n.directories.includes(t)||n.directories.push(t)}}return this.updateFileListCache(n).cacheUpdated}catch(n){return console.error("Error moving file:",n),!1}}removeFile(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>t.name!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing file:",t),!1}}removeFolder(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>!t.name.startsWith(e+"/")),t.directories=t.directories.filter(t=>t!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing folder:",t),!1}}getFilesInFolder(e){try{const t=this.getMutableFileList(),a=t.files.filter(t=>t.name.startsWith(e+"/")),i=t.directories.filter(t=>t.startsWith(e+"/"));return{files:a,directories:i}}catch(t){return console.error("Error getting files in folder:",t),{files:[],directories:[]}}}buildFilterParams(e){let t="";return e.accessStatus&&e.accessStatus.length>0&&(t+=`&accessStatus=${encodeURIComponent(e.accessStatus.join(","))}`),e.listType&&e.listType.length>0&&(t+=`&listType=${encodeURIComponent(e.listType.join(","))}`),e.label&&e.label.length>0&&(t+=`&label=${encodeURIComponent(e.label.join(","))}`),e.fileType&&e.fileType.length>0&&(t+=`&fileType=${encodeURIComponent(e.fileType.join(","))}`),e.channel&&e.channel.length>0&&(t+=`&channel=${encodeURIComponent(e.channel.join(","))}`),e.channelName&&e.channelName.length>0&&(t+=`&channelName=${encodeURIComponent(e.channelName.join(","))}`),t}async refreshFileList(e,t="",a="",i="",n={}){t=t.trim();try{let s=`/api/manage/list?count=60&dir=${e}&search=${encodeURIComponent(t)}`;a&&(s+=`&includeTags=${encodeURIComponent(a)}`),i&&(s+=`&excludeTags=${encodeURIComponent(i)}`),s+=this.buildFilterParams(n);const r=await(0,D.A)(s,{method:"GET"}),o=await r.json();return o.isIndexedResponse||ye.nk.warning(gn.Ay.global.t("dashboard.indexingWarning")),this.updateFileListCache(o).cacheUpdated}catch(s){return console.error("Error refreshing file list:",s),!1}}async loadMoreFiles(e,t="",a="",i="",n=60,s={}){t=t.trim();try{const r=this.getMutableFileList(),o=r.files.length;let l=`/api/manage/list?dir=${e}&start=${o}&count=${n}&search=${encodeURIComponent(t)}`;a&&(l+=`&includeTags=${encodeURIComponent(a)}`),i&&(l+=`&excludeTags=${encodeURIComponent(i)}`),l+=this.buildFilterParams(s);const d=await(0,D.A)(l,{method:"GET"}),c=await d.json();return r.files.push(...c.files),this.updateFileListCache(r).cacheUpdated}catch(r){return console.error("Error loading more files:",r),{files:[],directories:[]}}}}const vn=new bn;var kn=a(62388),yn=a(48903),wn=a(90144);function _n(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}function Fn(e,t){const a=Math.min(e.x,t.x),i=Math.min(e.y,t.y),n=Math.abs(t.x-e.x),s=Math.abs(t.y-e.y);return{left:a,top:i,width:n,height:s,right:a+n,bottom:i+s}}function Cn(e){const{modes:t,mainSelector:a=".main-container",viewMode:i,items:n}=e,s=(0,wn.KR)(!1),r=(0,wn.KR)({left:0,top:0,width:0,height:0,right:0,bottom:0});let o=null,l=[],d=!1;const h=768;let u=!1;const f=50,m=10;let p=null,g="";function b(){const e=(0,wn.BA)(i);return t[e]||void 0}function v(){const e=(0,wn.BA)(i);return("card"===e||"list"===e)&&window.innerWidth>h}function k(){v()?u||A():u&&(z(),I())}function y(e){const t=e.target,i=t.closest(a);if(!i)return!1;const n=b();if(n){const e=t.closest(n.itemSelector);if(e){const t=(0,wn.BA)(n.containerRef);if(t&&t.contains(e))return!1}}const s=t.closest("button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container");return!s}function w(e){return e.shiftKey||e.ctrlKey||e.metaKey}function _(){const e=(0,wn.BA)(n);l=e.map(e=>!!e.selected)}let F=0;function C(){function e(){const t=window.innerHeight;let a=0;F>=t-f?a=m:F<=f&&(a=-m),0!==a&&(window.scrollBy(0,a),o&&(o.y-=a,r.value=Fn(o,{x:r.value.right>=o.x?r.value.right:r.value.left,y:F}),$())),p=requestAnimationFrame(e)}null===p&&(p=requestAnimationFrame(e))}function T(){null!==p&&(cancelAnimationFrame(p),p=null)}function S(){g=document.body.style.userSelect,document.body.style.userSelect="none"}function L(){document.body.style.userSelect=g}function $(){const e=b();if(!e)return;const t=(0,wn.BA)(e.containerRef);if(!t)return;const a=(0,wn.BA)(n),i=r.value,s={left:i.left,top:i.top,right:i.right,bottom:i.bottom},o=t.querySelectorAll(e.itemSelector);a.forEach((e,t)=>{const a=o[t];if(!a)return;const i=a.getBoundingClientRect(),n={left:i.left,top:i.top,right:i.right,bottom:i.bottom},r=_n(s,n);d&&l[t]?e.selected=!0:e.selected=r})}function x(e){if(0===e.button&&y(e)){if(o={x:e.clientX,y:e.clientY},d=w(e),_(),!d){const e=(0,wn.BA)(n);e.forEach(e=>{e.selected=!1})}s.value=!0,r.value=Fn(o,o),S(),document.addEventListener("mousemove",E),document.addEventListener("mouseup",D)}}function E(e){if(!s.value||!o)return;const t={x:e.clientX,y:e.clientY};F=e.clientY,r.value=Fn(o,t),$();const a=window.innerHeight;F<=f||F>=a-f?C():T()}function D(e){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",D))}function A(){u||(document.addEventListener("mousedown",x),u=!0)}function I(){u&&(document.removeEventListener("mousedown",x),u=!1)}function z(){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",D))}function U(){k()}return(0,c.wB)(()=>(0,wn.BA)(i),()=>{z(),k()}),(0,c.sV)(()=>{v()&&A(),window.addEventListener("resize",U)}),(0,c.xo)(()=>{z(),L(),T(),I(),window.removeEventListener("resize",U)}),{isDragging:s,selectionRect:r}}const Tn=["time","size","rawName","fileName"],Sn=["asc","desc"];function Ln(e,t,a){try{const i=localStorage.getItem(e);return t.includes(i)?i:a}catch{return a}}var $n={name:"AdminDashBoard",mixins:[yn.A],data(){return{Number:0,directFileCount:0,directFolderCount:0,showLogoutButton:!1,tableData:[],tempSearch:"",search:"",searchKeywords:"",searchIncludeTags:"",searchExcludeTags:"",isSearchMode:!1,currentPage:1,pageSize:15,selectedFiles:[],sortField:Ln("sortField",Tn,"time"),sortOrder:Ln("sortOrder",Sn,"desc"),isUploading:!1,showdetailDialog:!1,detailFile:null,activeUrlTab:"originUrl",defaultUrlFormat:"originUrl",showUrlDialog:!1,useCustomUrl:"false",customUrlPrefix:"",loading:!1,currentPath:"",refreshLoading:!1,showTagDialog:!1,showBatchTagDialog:!1,currentTagFile:"",viewMode:"card",showMobileActionModal:!1,mobileActionFile:null,mobileActionIndex:-1,mobileActionIsFolder:!1,longPressTimer:null,showMobileDirectoryDrawer:!1,jumpPage:"",filters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},channelNameOptions:[],showMoveDialog:!1,moveTargetPath:"/",moveFileKey:"",moveFileIndex:-1,isBatchMove:!1,pageSwipeStartX:null,pageSwipeStartY:null,pageSwipeStartTime:0}},components:{DashboardTabs:oi.A,TagManagementDialog:Me,BatchTagDialog:Ce,SkeletonLoader:Ta,FileCard:ua,FolderCard:wa,FileListItem:Xt,FileDetailDialog:ct,BatchActionBar:kt,MobileActionSheet:Q,MobileDirectoryDrawer:X,DashboardCheckbox:Ia,FilterDropdown:ri,MoveFileDialog:U,LanguageSwitcher:pn.A},setup(){const e=(0,wn.KR)(null),t=(0,wn.KR)(null),a=(0,wn.KR)("card"),i=(0,wn.KR)([]),{isDragging:n,selectionRect:s}=Cn({modes:{card:{containerRef:e,itemSelector:".img-card"},list:{containerRef:t,itemSelector:".list-item"}},viewMode:a,items:i});return{cardContainerRef:e,listContainerRef:t,viewModeRef:a,itemsRef:i,isDragging:n,selectionRect:s}},computed:{...(0,un.L8)(["adminUrlSettings","userConfig"]),filteredTableData(){return this.tableData},totalPages(){return Math.ceil(this.filteredTableData.length/this.pageSize)||1},realTotalPages(){const e=this.directFolderCount+this.directFileCount;return Math.ceil(e/this.pageSize)||1},activeFilterCount(){return Object.values(this.filters).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0)},hasSearchOrFilter(){return this.isSearchMode||this.activeFilterCount>0},paginatedTableData(){const e=this.sortData(this.filteredTableData),t=(this.currentPage-1)*this.pageSize,a=t+this.pageSize;let i=e.slice(t,a);const n=i.filter(e=>this.isImage(e)).map(e=>this.getFileLink(e.name));return i.forEach(e=>{this.isImage(e)&&(e.previewSrcList=n.slice(n.indexOf(this.getFileLink(e.name))).concat(n.slice(0,n.indexOf(this.getFileLink(e.name)))))}),i.forEach(e=>{"TelegramNew"===e.metadata?.Channel||"Telegram"===e.metadata?.Channel?e.channelTag="TG":"CloudflareR2"===e.metadata?.Channel?e.channelTag="R2":"S3"===e.metadata?.Channel?e.channelTag="S3":"Discord"===e.metadata?.Channel?e.channelTag="DC":"HuggingFace"===e.metadata?.Channel?e.channelTag="HF":"WebDAV"===e.metadata?.Channel?e.channelTag="WD":"External"===e.metadata?.Channel?e.channelTag=this.$t("dashboard.externalTag"):e.channelTag=this.$t("dashboard.unknownTag")}),i},sortLabel(){const e={time:"dashboard.sortByTime",size:"dashboard.sortBySize",rawName:"dashboard.sortByRawName",fileName:"dashboard.sortByFileName"},t=this.$t(e[this.sortField]||e.time),a=this.$t("desc"===this.sortOrder?"dashboard.sortDesc":"dashboard.sortAsc");return`${t} · ${a}`},dialogWidth(){return window.innerWidth>768?"50%":"90%"},detailDialogWidth(){return window.innerWidth>768?"70%":"90%"},accessType(){return"White"===this.detailFile?.metadata?.ListType?this.$t("filter.normal"):"Block"===this.detailFile?.metadata?.ListType||"adult"===this.detailFile?.metadata?.Label?this.$t("filter.blocked"):this.$t("filter.normal")},allUrl(){return"External"===this.detailFile?.metadata?.Channel?{originUrl:`${this.detailFile?.metadata?.ExternalLink}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}:{originUrl:`${this.rootUrl}${this.detailFile?.name}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.rootUrl}${this.detailFile?.name}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}},tableColumnNum(){return window.innerWidth>768?3:1},tablePreviewSpan(){return window.innerWidth>768?2:1},disableTooltip(){return window.innerWidth<768},selectPage(){return this.paginatedTableData.every(e=>e.selected)},selectedPageFiles(){return this.paginatedTableData.some(e=>e.selected)},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.userConfig?.urlPrefix||`${document.location.origin}/file/`},isSelectAll:{get(){return this.paginatedTableData.length>0&&this.paginatedTableData.every(e=>e.selected)},set(e){this.paginatedTableData.forEach(t=>t.selected=e)}},isIndeterminate(){const e=this.paginatedTableData.filter(e=>e.selected).length;return e>0&&ee.selected&&!this.selectedFiles.includes(e))),this.selectedFiles=this.selectedFiles.filter(e=>e.selected),this.selectedFiles=this.selectedFiles.filter(t=>e.includes(t))},deep:!0},defaultUrlFormat(e){localStorage.setItem("defaultUrlFormat",e)},showdetailDialog(e){e&&(this.activeUrlTab=this.defaultUrlFormat||"originUrl")},customUrlPrefix(e){this.$store.commit("setAdminUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setAdminUrlSettings",{key:"useCustomUrl",value:e})},currentPath(e){this.tableData.forEach(e=>e.selected=!1)}},methods:{setViewMode(e){this.viewMode!==e&&(this.viewMode=e,localStorage.setItem("viewMode",this.viewMode))},handleSelectAllPage(e){this.paginatedTableData.forEach(t=>t.selected=e)},handleTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!1,this.showMobileActionModal=!0},500)},handleTouchEnd(){this.longPressTimer&&(clearTimeout(this.longPressTimer),this.longPressTimer=null)},handleFolderTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!0,this.showMobileActionModal=!0},500)},handleMobileAction(e){const t=this.mobileActionFile,a=this.mobileActionIndex;if(this.showMobileActionModal=!1,t)switch(e){case"detail":this.openDetailDialog(a,t.name);break;case"copy":this.handleCopy(a,t.name);break;case"folderCopy":this.handleFolderCopy(t.name);break;case"download":this.handleDownload(t.name);break;case"move":this.handleMove(a,t.name);break;case"delete":this.handleDelete(a,t.name);break;case"tag":this.handleTagManagement(t.name);break}},handleGoBack(){const e=this.currentPath.split("/").filter(Boolean);if(e.length>0){e.pop();const t=e.join("/");this.navigateToFolder(t)}this.showMobileDirectoryDrawer=!1},getTagColor(e){const t=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)"];return t[e%t.length]},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)},formatFileSize(e){if(!e||0===e)return"-";if(e=Number(e),isNaN(e))return"-";const t=["B","KB","MB","GB","TB"];let a=0;while(e>=1024&&a0?1:0)+" "+t[a]},handleSearch(){if(this.search=this.tempSearch,this.isSearchMode=""!==this.search.trim(),this.currentPage=1,this.search&&this.search.trim()){const e=[],t=[];let a=this.search;const i=/-#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(i,(e,a)=>(t.push(a.toLowerCase())," "));const n=/#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(n,(t,a)=>(e.push(a.toLowerCase())," ")),this.searchKeywords=a.replace(/\s+/g," ").trim(),this.searchIncludeTags=e.join(","),this.searchExcludeTags=t.join(","),console.log("Search keywords:",this.searchKeywords),console.log("Include tags:",this.searchIncludeTags),console.log("Exclude tags:",this.searchExcludeTags)}else this.searchKeywords="",this.searchIncludeTags="",this.searchExcludeTags="";this.refreshFileList()},handleFilterChange({type:e,filters:t}){this.filters=t,this.currentPage=1,this.refreshFileList()},clearFilters(){this.filters={listType:[],label:[],fileType:[],channel:[],channelName:[]},this.currentPage=1,this.refreshFileList()},async extractChannelNames(){try{const e=await(0,D.A)("/api/channels?includeDisabled=true",{method:"GET"});if(e.ok){const t=await e.json(),a=[],i={telegram:"Telegram",cfr2:"Cloudflare R2",s3:"S3",discord:"Discord",huggingface:"HuggingFace",webdav:"WebDAV"};Object.entries(t).forEach(([e,t])=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{t.name&&a.push({name:t.name,type:t.type,typeLabel:i[e]||e,value:`${t.type}:${t.name}`})})}),a.sort((e,t)=>e.type!==t.type?e.type.localeCompare(t.type):e.name.localeCompare(t.name)),this.channelNameOptions=a}}catch(e){console.error("Failed to fetch channel names:",e)}},handleDownload(e){const t=document.createElement("a");t.href=this.getFileLink(e),t.download=e,t.click()},openDetailDialog(e,t){this.detailFile=this.paginatedTableData[e],this.showdetailDialog=!0},handleTabClick(e){this.activeUrlTab=e.props.name},handleUrlClick(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("dashboard.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("dashboard.copyFailed")})})},handleDetailDelete(e){this.$confirm(this.$t("dashboard.deleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/delete/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&this.tableData.splice(t,1)}}).then(()=>{this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.deleteSuccess")),this.showdetailDialog=!1}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBlock(e){this.$confirm(this.$t("dashboard.blockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/block/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="Block")}}).then(()=>{this.$message.success(this.$t("dashboard.blockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.blockFailed")))}).catch(()=>console.log("Block cancelled"))},handleWhite(e){this.$confirm(this.$t("dashboard.whiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/white/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="White")}}).then(()=>{this.$message.success(this.$t("dashboard.whiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.whiteFailed")))}).catch(()=>console.log("White cancelled"))},handleDelete(e,t){const a=this.tableData.find(e=>e.name===t).isFolder;this.$confirm(a?this.$t("dashboard.deleteFolderConfirm"):this.$t("dashboard.deleteFileConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/delete/${t}?folder=${a}`,{method:"GET"}).then(e=>{if(!e.ok)return Promise.reject("Request failed");{const e=this.tableData.findIndex(e=>e.name===t);-1!==e&&this.tableData.splice(e,1)}}).then(()=>{this.updateStats(-1,!1),vn.removeFile(t),this.$message.success(this.$t("dashboard.deleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBatchDelete(){this.$confirm(this.$t("dashboard.batchDeleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>{const t=e.isFolder;return(0,D.A)(`/api/manage/delete/${e.name}?folder=${t}`,{method:"GET"})});Promise.all(e).then(e=>{let t=0;e.forEach((e,a)=>{if(e.ok){t++;const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[a].name);-1!==e&&this.tableData.splice(e,1),vn.removeFile(this.selectedFiles[a].name)}}),this.selectedFiles=[],this.updateStats(-t,!1),this.$message.success(this.$t("dashboard.batchDeleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchDeleteFailed")))}).catch(()=>console.log("Batch delete cancelled"))},async handleBatchCopy(){const e=this.selectedFiles.filter(e=>!e.isFolder),t=this.selectedFiles.filter(e=>e.isFolder);let a=null;t.length>0&&(a=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")}));try{let n=[...e];for(const e of t)try{const t=await(0,D.A)(`/api/manage/list?dir=${encodeURIComponent(e.name)}&recursive=true&count=-1`,{method:"GET"}),a=await t.json();a.files&&a.files.length>0&&(n=n.concat(a.files))}catch(i){console.error(`获取文件夹 ${e.name} 内容失败:`,i)}if(a&&a.close(),0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===s.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const r=s.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(r),this.$message.success(this.$t("dashboard.batchCopySuccess",{count:s.length}))):this.copyToClipboardFallback(r)}catch(i){a&&a.close(),console.error("Batch copy failed:",i),this.$message.error(this.$t("dashboard.batchCopyFailed"))}},copyToClipboardFallback(e){const t=document.createElement("textarea");document.body.appendChild(t),t.style.position="fixed",t.style.clip="rect(0 0 0 0)",t.style.top="10px",t.value=e,t.select(),document.execCommand("copy"),document.body.removeChild(t),this.$message.success(this.$t("dashboard.batchCopyLinksSuccess"))},handleCopy(e,t){let a="";if("External"===this.paginatedTableData[e].metadata?.Channel)switch(this.defaultUrlFormat){case"originUrl":a=this.paginatedTableData[e].metadata?.ExternalLink;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.paginatedTableData[e].metadata?.ExternalLink})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.paginatedTableData[e].metadata?.ExternalLink}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}else switch(this.defaultUrlFormat){case"originUrl":a=`${this.rootUrl}${t}`;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.rootUrl}${t})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.rootUrl}${t}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}navigator.clipboard?navigator.clipboard.writeText(a).then(()=>this.$message.success(this.$t("dashboard.copyFileLinkSuccess"))):this.copyToClipboardFallback(a)},async loadMoreData(){this.loading=!0;try{await vn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,60,this.filters),await this.fetchFileList()}catch(e){this.$message.error(this.$t("dashboard.loadMoreFailed"))}finally{this.loading=!1}},updateStats(e,t=!1){t?this.Number=e:this.Number+=e},setSortField(e){Tn.includes(e)&&(this.sortField=e,this.currentPage=1,localStorage.setItem("sortField",e))},setSortOrder(e){Sn.includes(e)&&(this.sortOrder=e,this.currentPage=1,localStorage.setItem("sortOrder",e))},sortData(e){if(!Array.isArray(e))return[];const t=e.filter(e=>e.isFolder),a=e.filter(e=>!e.isFolder),i=e=>{const t=e=>{if(null===e||void 0===e||""===e)return null;const t=Number(e);return Number.isFinite(t)?t:null},a=t(e.metadata?.FileSizeBytes);if(null!==a)return a;const i=t(e.metadata?.FileSize);return null!==i?1024*i*1024:t(e.size)??0},n=e=>{switch(this.sortField){case"size":return i(e);case"rawName":return e.metadata?.RawName||e.name||"";case"fileName":return e.metadata?.FileName||e.name||"";case"time":default:return e.metadata?.TimeStamp?new Date(e.metadata.TimeStamp).getTime():0}},s=(e,t)=>{const a=n(e),i=n(t);let s=0;return s="string"===typeof a||"string"===typeof i?String(a||"").localeCompare(String(i||"")):a-i,"desc"===this.sortOrder?-s:s};return t.sort(s),a.sort(s),t.concat(a)},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},handleSelectPage(){this.selectPage?this.paginatedTableData.forEach(e=>e.selected=!1):this.paginatedTableData.forEach(e=>e.selected=!0)},clearSelection(){this.tableData.forEach(e=>e.selected=!1),this.selectedFiles=[]},handleBatchAction(e){"copy"===e?this.handleBatchCopy():"delete"===e?this.handleBatchDelete():"download"===e?this.handleBatchDownload():"move"===e?this.handleBatchMove():"tagManagement"===e?this.handleBatchTagManagement():"ban"===e?this.handleBatchBlock():"white"===e&&this.handleBatchWhite()},handleMove(e,t){this.moveFileKey=t,this.moveFileIndex=e,this.isBatchMove=!1,this.moveTargetPath="/",this.showMoveDialog=!0},handleBatchMove(){this.isBatchMove=!0,this.moveTargetPath="/",this.showMoveDialog=!0},confirmMove(e){const t=e,a=(0,kn.G)(t);if(!a.valid)return void this.$message.error(a.error);const i=t.replace(/^\/+/,"")+(t.endsWith("/")||""===t?"":"/");i!==this.currentPath?(this.showMoveDialog=!1,this.isBatchMove?this.executeBatchMove(i):this.executeSingleMove(i)):this.$message.warning(this.$t("dashboard.moveTargetSameAsCurrent"))},executeSingleMove(e){const t=this.moveFileKey,a=this.tableData.find(e=>e.name===t)?.isFolder;(0,D.A)(`/api/manage/move/${t}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"}).then(i=>{if(!i.ok)return Promise.reject("Request failed");{const i=this.tableData.findIndex(e=>e.name===t);if(-1!==i){const n=e+t.split("/").pop();vn.moveFile(t,n,a,this.currentPath),this.tableData.splice(i,1),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})})}this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},executeBatchMove(e){const t=this.selectedFiles.map(t=>{const a=t.isFolder;return(0,D.A)(`/api/manage/move/${t.name}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"})});Promise.all(t).then(t=>{let a=0;t.forEach((t,i)=>{if(t.ok){a++;const t=this.selectedFiles[i];t.selected=!1;const n=this.tableData.findIndex(e=>e.name===t.name);if(-1!==n){const a=e+t.name.split("/").pop();vn.moveFile(t.name,a,t.isFolder,this.currentPath),this.tableData.splice(n,1)}}}),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})}),this.updateStats(-a,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},handleBatchBlock(){this.$confirm(this.$t("dashboard.batchBlockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,D.A)(`/api/manage/block/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="Block")}}),this.$message.success(this.$t("dashboard.batchBlockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchBlockFailed")))}).catch(()=>console.log("Batch block cancelled"))},handleBatchWhite(){this.$confirm(this.$t("dashboard.batchWhiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,D.A)(`/api/manage/white/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="White")}}),this.$message.success(this.$t("dashboard.batchWhiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchWhiteFailed")))}).catch(()=>console.log("Batch white cancelled"))},handleBatchDownload(){const e=new(mn()),t=e.folder("files"),a={},i=this.selectedFiles.map(async e=>{if(e.isFolder)return;const i=await fetch(this.getFileLink(e.name)),n=await i.blob();let s=e.metadata?.FileName||e.name;if(a[s]){const t=s.substring(s.lastIndexOf(".")),i=s.substring(0,s.lastIndexOf("."));s=`${i}(${a[s]})${t}`,a[e.name]++}else a[s]=1;t.file(s,n)});Promise.all(i).then(()=>e.generateAsync({type:"blob"})).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="files.zip",t.click()})},isVideo(e){if(this.isAudio(e))return!1;let t=e.metadata?.FileType?.includes("video");if(!t){const a=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","rmvb","3gp","mpg","mpeg","m4v","f4v","rm","asf","dat","ts","vob","swf","divx","xvid","m2ts","mts","m2v","3g2","3gp2","3gpp","3gpp2","mpe","m1v","mpv","mpv2","mp2v","m2t","m2ts","m2v","m4v"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isAudio(e){let t=e.metadata?.FileType?.includes("audio");if(!t){const a=["mp3","wav","flac","aac","ogg","wma","m4a","ape","aiff","alac","opus","mid","midi","m4b","m4p","m4r","amr","au","ra","ram"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isImage(e){let t=e.metadata?.FileType?.includes("image");if(!t){const a=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","psd","ai","eps","raw","cr2","nef","orf","sr2","dng","arw","rw2","raf","pef","x3f","srf","erf","mrw","nrw","kdc","dcr","mef","mos","crw","raf","rwl","srw","3fr","fff","iiq","qtk","bay","k25","kdc","dcs","drf","dng","erf","kdc","mdc","mef","mos","mrw","nef","nrw","orf","pef","ptx","pxn","r3d","raf","raw","rwl","rw2","rwz","sr2","srf","x3f"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},getFileLink(e){const t=`/file/${e}?from=admin`;return t},handlePageChange(e){this.currentPage=e,this.currentPage===Math.ceil(this.tableData.length/this.pageSize)&&this.loadMoreData()},isMobileViewport(){return window.innerWidth<768},updateResponsivePageSize(){const e=this.isMobileViewport()?16:15;if(this.pageSize===e)return;const t=(this.currentPage-1)*this.pageSize;this.pageSize=e,this.currentPage=Math.min(Math.floor(t/e)+1,this.realTotalPages)},isSwipeIgnoredTarget(e){return Boolean(e?.closest?.("button, a, input, textarea, select, .el-checkbox, .action-btn, .list-action-btn"))},handlePageSwipeStart(e){if(!this.isMobileViewport()||this.isDragging||this.loading||this.showMobileActionModal||this.showMobileDirectoryDrawer||this.isSwipeIgnoredTarget(e.target))return void this.resetPageSwipe();const t=e.touches?.[0];t&&(this.pageSwipeStartX=t.clientX,this.pageSwipeStartY=t.clientY,this.pageSwipeStartTime=Date.now())},async handlePageSwipeEnd(e){if(null===this.pageSwipeStartX||null===this.pageSwipeStartY)return;const t=e.changedTouches?.[0];if(!t)return void this.resetPageSwipe();const a=t.clientX-this.pageSwipeStartX,i=t.clientY-this.pageSwipeStartY,n=Date.now()-this.pageSwipeStartTime;if(this.resetPageSwipe(),n>700||Math.abs(a)<64||Math.abs(a)<1.35*Math.abs(i))return;const s=a<0?this.currentPage+1:this.currentPage-1;await this.goToSwipePage(s)},resetPageSwipe(){this.pageSwipeStartX=null,this.pageSwipeStartY=null,this.pageSwipeStartTime=0},async goToSwipePage(e){e<1||e>this.realTotalPages||e===this.currentPage||(e>this.totalPages?await this.loadMoreDataUntilPage(e):this.handlePageChange(e))},handleJumpPage(){const e=parseInt(this.jumpPage);isNaN(e)||e<1?this.$message.warning(this.$t("dashboard.invalidPageNumber")):e>this.realTotalPages?this.$message.warning(this.$t("dashboard.pageExceedsMax",{max:this.realTotalPages})):(e>this.totalPages?(this.$message.info(this.$t("dashboard.loadingData")),this.loadMoreDataUntilPage(e)):this.currentPage=e,this.jumpPage="")},async loadMoreDataUntilPage(e){this.loading=!0;try{const t=e*this.pageSize,a=this.filteredTableData.filter(e=>e.isFolder).length,i=this.filteredTableData.filter(e=>!e.isFolder).length,n=Math.max(0,t-a-i);n>0&&(await vn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,n,this.filters),await this.fetchFileList()),this.currentPage=Math.min(e,this.totalPages)}catch(t){this.$message.error(this.$t("dashboard.loadDataFailed"))}finally{this.loading=!1}},isFolder(e){if(e.isFolder)return!0;let t=e.name;if(t.startsWith("http")&&(t=t.split("/file/")[1]),t&&t.includes("/")){const e=this.currentPath?t.substring(this.currentPath.length):t;return""===this.currentPath?!t.split("/")[0].includes("."):e.includes("/")}return!1},getFolderName(e){let t="";if(e&&e.includes("/")){const a=e.split("/");if(""===this.currentPath)t=a[0];else{const a=e.substring(this.currentPath.length);t=a.split("/")[0]}}else t=e;const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileName(e){let t=e.split("/").pop();const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileNameStart(e){if(!e)return"";if(e.length<=30)return e;const t=e.lastIndexOf(".");if(t>0){const a=e.substring(0,t),i=Math.min(a.length,Math.floor(.6*e.length));return a.substring(0,i)}return e.substring(0,Math.floor(.6*e.length))},getFileNameEnd(e){if(!e)return"";if(e.length<=30)return"";const t=e.lastIndexOf(".");if(t>0){const a=e.substring(t),i=e.substring(0,t),n=Math.min(8,Math.floor(.2*i.length));return"…"+i.substring(i.length-n)+a}const a=Math.min(10,Math.floor(.3*e.length));return"…"+e.substring(e.length-a)},enterFolder(e){this.currentPath=e+(e.endsWith("/")?"":"/"),this.refreshFileList()},navigateToFolder(e){this.currentPath=e?e+(e.endsWith("/")?"":"/"):"",this.refreshFileList()},async fetchFileList(){this.loading=!0;try{const e=vn.getLocalFileList(),t=new Set(e.directories||[]),a=e.files||[],i=Array.from(t).map(e=>({name:e,isFolder:!0,selected:!1,metadata:{FileName:e.split("/").pop()}})),n=a.map(e=>({name:e.name,isFolder:!1,selected:!1,metadata:e.metadata}));this.tableData=[...i,...n],this.updateStats(e.totalCount,!0),this.directFileCount=e.directFileCount||0,this.directFolderCount=e.directFolderCount||0}catch(e){console.error("Error fetching file list:",e),this.$message.error(this.$t("dashboard.fetchFileListFailed"))}finally{this.loading=!1}},async refreshFileList(){this.refreshLoading=!0,this.loading=!0;try{const e=await vn.refreshFileList(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,this.filters);if(!e)throw new Error("Refresh failed");await this.fetchFileList()}catch(e){!e.message?.includes("Unauthorized")&&this.$store.state.adminLoggedIn&&(console.error("Error refreshing file list:",e),this.$message.error(this.$t("dashboard.refreshFailed")))}finally{this.refreshLoading=!1,this.loading=!1}},async refreshLocalFileList(){this.refreshLoading=!0,this.loading=!0;try{await this.fetchFileList()}catch(e){console.error("Error refreshing local file list:",e),this.$message.error(this.$t("dashboard.refreshFailed"))}finally{this.refreshLoading=!1,this.loading=!1}},handleTagManagement(e){this.currentTagFile=e,this.showTagDialog=!0},handleBatchTagManagement(){0!==this.selectedFiles.length?this.showBatchTagDialog=!0:this.$message.warning(this.$t("dashboard.selectFilesFirst"))},async handleTagsUpdated(e){const t=this.tableData.findIndex(e=>e.name===this.currentTagFile);-1!==t&&(this.tableData[t].metadata||(this.tableData[t].metadata={}),this.tableData[t].metadata.Tags=e,this.showdetailDialog&&this.detailFile?.name===this.currentTagFile&&(this.detailFile.metadata||(this.detailFile.metadata={}),this.detailFile.metadata.Tags=e))},async handleBatchTagsUpdated(){await this.refreshLocalFileList()},handleMetadataUpdated(e,t){const a=this.tableData.findIndex(t=>t.name===e);-1!==a&&(this.tableData[a].metadata={...this.tableData[a].metadata,...t}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.metadata={...this.detailFile.metadata,...t})},handleFileRenamed(e,t,a){const i=this.tableData.findIndex(t=>t.name===e);-1!==i&&(this.tableData[i].name=t,this.tableData[i].metadata={...this.tableData[i].metadata,...a}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.name=t,this.detailFile.metadata={...this.detailFile.metadata,...a},this.showdetailDialog=!1,this.$nextTick(()=>{this.showdetailDialog=!0}))},generateFileLink(e,t){const a="External"===t?.Channel,i=a?t?.ExternalLink:`${this.rootUrl}${e}`,n=t?.FileName||e;switch(this.defaultUrlFormat){case"originUrl":return i;case"mdUrl":return`![${n}](${i})`;case"htmlUrl":return`${n}`;case"bbUrl":return`[img]${i}[/img]`;case"tgId":return t?.TgFileId||"";case"s3Location":return t?.S3Location||"";default:return i}},async handleFolderCopy(e){const t=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")});try{const a=await(0,D.A)(`/api/manage/list?dir=${encodeURIComponent(e)}&recursive=true&count=-1`,{method:"GET"}),i=await a.json();if(t.close(),!i.files||0===i.files.length)return void this.$message.warning(this.$t("dashboard.folderEmptyNoLinks"));const n=i.files.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length}))):(this.copyToClipboardFallback(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length})))}catch(a){t.close(),console.error("Copy folder links failed:",a),this.$message.error(this.$t("dashboard.copyFolderLinksFailed"))}}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.updateResponsivePageSize(),window.addEventListener("resize",this.updateResponsivePageSize),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,this.refreshFileList().then(()=>this.extractChannelNames()).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("dashboard.syncDataError"))}).finally(()=>{this.loading=!1}),this.customUrlPrefix=this.adminUrlSettings.customUrlPrefix,this.useCustomUrl=this.adminUrlSettings.useCustomUrl;const e=localStorage.getItem("viewMode");"card"!==e&&"list"!==e||(this.viewMode=e)},beforeUnmount(){window.removeEventListener("resize",this.updateResponsivePageSize)}};const xn=(0,I.A)($n,[["render",hn],["__scopeId","data-v-1af8d52e"]]);var En=xn},73565:function(e,t,a){"use strict";a(85331)},79899:function(e,t,a){"use strict";a(85331)},88830:function(e,t,a){"use strict";a(85331)},95385:function(e,t,a){"use strict";a(85331)},98642:function(e,t,a){"use strict";a(85331)}}]); -//# sourceMappingURL=596.aa72d40f.js.map \ No newline at end of file diff --git a/frontend-dist/js/596.aa72d40f.js.gz b/frontend-dist/js/596.aa72d40f.js.gz deleted file mode 100644 index edc729a0d76e652934088f3b2e2c1cc982a00721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60023 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 o>9aR_N)LAjd#z#fCp $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"move-file-dialog-wrapper\"\n};\nconst _hoisted_2 = {\n class: \"move-dialog-content\"\n};\nconst _hoisted_3 = {\n class: \"move-path-input-container\"\n};\nconst _hoisted_4 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_6 = {\n class: \"move-drawer-content\"\n};\nconst _hoisted_7 = {\n class: \"move-path-section\"\n};\nconst _hoisted_8 = {\n class: \"move-path-label\"\n};\nconst _hoisted_9 = {\n class: \"move-path-input-row\"\n};\nconst _hoisted_10 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"embedded-tree-section\"\n};\nconst _hoisted_12 = {\n class: \"tree-section-header\"\n};\nconst _hoisted_13 = {\n class: \"tree-section-title\"\n};\nconst _hoisted_14 = {\n class: \"tree-container\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_16 = {\n class: \"error-text\"\n};\nconst _hoisted_17 = {\n class: \"node-label\"\n};\nconst _hoisted_18 = {\n class: \"drawer-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_dialog, {\n key: 0,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n width: \"500px\",\n \"show-close\": true,\n class: \"move-dialog\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, {\n prepend: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_DirectoryTreePicker, {\n \"current-directory\": $props.currentDirectory,\n source: \"admin\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-picker-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])]), _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t('moveFile.hint')), 1)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"])) : (_openBlock(), _createBlock(_component_el_drawer, {\n key: 1,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n direction: \"btt\",\n size: \"auto\",\n \"show-close\": true,\n class: \"move-drawer\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n onClick: $options.handleClose,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n class: \"directory-picker-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showTreePicker = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('moveFile.hintMobile')), 1)]), $data.showTreePicker ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('moveFile.selectDirectory')), 1), _createVNode(_component_el_button, {\n text: \"\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showTreePicker = false)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })]), _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_14, [$data.treeError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_16, _toDisplayString($data.treeError), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleTreeNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.treeLoading]])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"]))]);\n}","import DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'MoveFileDialog',\n components: {\n DirectoryTreePicker\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentDirectory: {\n type: String,\n default: ''\n },\n isBatchMove: {\n type: Boolean,\n default: false\n },\n initialPath: {\n type: String,\n default: '/'\n }\n },\n emits: ['update:modelValue', 'confirm', 'close'],\n data() {\n return {\n targetPath: '/',\n loading: false,\n windowWidth: window.innerWidth,\n // 移动端内嵌树相关\n showTreePicker: false,\n treeData: [],\n treeLoading: false,\n treeError: '',\n treeProps: {\n children: 'children',\n label: 'name'\n }\n };\n },\n computed: {\n dialogVisible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n isDesktop() {\n return this.windowWidth > 768;\n }\n },\n watch: {\n modelValue(newVal) {\n if (newVal) {\n this.targetPath = this.initialPath || '/';\n this.showTreePicker = false;\n }\n },\n showTreePicker(newVal) {\n if (newVal && !this.isDesktop) {\n this.fetchDirectoryTree();\n }\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n handleDirectorySelect(path) {\n this.targetPath = path;\n },\n handleConfirm() {\n this.$emit('confirm', this.targetPath);\n },\n handleClose() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n },\n // 移动端内嵌树相关方法\n async fetchDirectoryTree() {\n this.treeLoading = true;\n this.treeError = '';\n try {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.treeError = this.$t('moveFile.authFailed');\n } else {\n this.treeError = this.$t('moveFile.serverError');\n }\n return;\n }\n const data = await response.json();\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n this.treeError = this.$t('moveFile.loadTreeFailed');\n } finally {\n this.treeLoading = false;\n }\n },\n handleTreeNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.targetPath = path;\n this.showTreePicker = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MoveFileDialog.vue?vue&type=template&id=7aaa437c&scoped=true\"\nimport script from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\nexport * from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\n\nimport \"./MoveFileDialog.vue?vue&type=style&index=0&id=7aaa437c&scoped=true&lang=css\"\nimport \"./MoveFileDialog.vue?vue&type=style&index=1&id=7aaa437c&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7aaa437c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"mobile-drawer-header\"\n};\nconst _hoisted_2 = {\n class: \"mobile-drawer-title\"\n};\nconst _hoisted_3 = {\n class: \"mobile-drawer-content\"\n};\nconst _hoisted_4 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"drawer-slide\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-overlay\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"mobile-drawer\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('mobileDirectory.title')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"mobile-drawer-close\",\n onClick: $options.close\n }, null, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: !$props.currentPath\n }]),\n onClick: _cache[0] || (_cache[0] = $event => $options.navigate(''))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.rootDirectory')), 1)], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pathParts, (folder, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: index === $options.pathParts.length - 1\n }]),\n style: _normalizeStyle({\n paddingLeft: (index + 1) * 16 + 16 + 'px'\n }),\n onClick: $event => $options.navigate($options.pathParts.slice(0, index + 1).join('/'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(folder), 1)], 14, _hoisted_4);\n }), 128)), $props.currentPath ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-back\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goBack && $options.goBack(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.goBack')), 1)])) : _createCommentVNode(\"\", true)])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'MobileDirectoryDrawer',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentPath: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'navigate', 'goBack'],\n computed: {\n pathParts() {\n return this.currentPath.split('/').filter(Boolean);\n }\n },\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n navigate(path) {\n this.$emit('navigate', path);\n this.close();\n },\n goBack() {\n this.$emit('goBack');\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileDirectoryDrawer.vue?vue&type=template&id=feeadb1c&scoped=true\"\nimport script from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\nexport * from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\n\nimport \"./MobileDirectoryDrawer.vue?vue&type=style&index=0&id=feeadb1c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-feeadb1c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"bottom-sheet-header\"\n};\nconst _hoisted_2 = {\n class: \"bottom-sheet-title\"\n};\nconst _hoisted_3 = {\n class: \"bottom-sheet-content\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"bottom-sheet\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bottom-sheet-overlay\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet\",\n onClick: _cache[8] || (_cache[8] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_cache[10] || (_cache[10] = _createElementVNode(\"div\", {\n class: \"bottom-sheet-handle\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1)]), _createElementVNode(\"div\", _hoisted_3, [!$props.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[0] || (_cache[0] = $event => $options.handleAction('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.viewDetail')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[1] || (_cache[1] = $event => $options.handleAction('copy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleAction('download'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.downloadFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleAction('tag'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.tagManagement')), 1)])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[5] || (_cache[5] = $event => $options.handleAction('folderCopy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[6] || (_cache[6] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFolder')), 1)])], 64)), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item bottom-sheet-danger\",\n onClick: _cache[7] || (_cache[7] = $event => $options.handleAction('delete'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString($props.isFolder ? _ctx.$t('mobileAction.deleteFolder') : _ctx.$t('mobileAction.deleteFile')), 1)])])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","export default {\n name: 'MobileActionSheet',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n title: {\n type: String,\n default: ''\n },\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:modelValue', 'action'],\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n handleAction(action) {\n this.$emit('action', action);\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileActionSheet.vue?vue&type=template&id=f5c66568&scoped=true\"\nimport script from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\nexport * from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\n\nimport \"./MobileActionSheet.vue?vue&type=style&index=0&id=f5c66568&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f5c66568\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"batch-tag-container\"\n};\nconst _hoisted_2 = {\n class: \"tab-content\"\n};\nconst _hoisted_3 = {\n class: \"tab-description\"\n};\nconst _hoisted_4 = {\n class: \"input-section\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_6 = [\"onClick\"];\nconst _hoisted_7 = {\n class: \"tags-to-add-section\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_9 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_10 = {\n class: \"action-buttons\"\n};\nconst _hoisted_11 = {\n class: \"tab-content\"\n};\nconst _hoisted_12 = {\n class: \"tab-description\"\n};\nconst _hoisted_13 = {\n key: 0,\n class: \"common-tags-section\"\n};\nconst _hoisted_14 = {\n class: \"tags-container\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_16 = {\n class: \"tab-content\"\n};\nconst _hoisted_17 = {\n class: \"tab-description\"\n};\nconst _hoisted_18 = {\n class: \"action-buttons\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_alert = _resolveComponent(\"el-alert\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('batchTag.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.activeTab = $event),\n type: \"border-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.addTab'),\n name: \"add\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t('batchTag.addDescription', {\n count: $options.fileCount\n })), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('batchTag.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddInputTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddInputTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_6);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.pendingTags')), 1), $data.tagsToAdd.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.tagsToAdd, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.removeFromToAdd(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('batchTag.noPendingTags')), 1))]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.executeAddTags,\n loading: $data.loading,\n disabled: $data.tagsToAdd.length === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.addToAllFiles')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"disabled\"])])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.removeTab'),\n name: \"remove\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t('batchTag.removeDescription')), 1), $data.commonTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.commonTags')), 1), _createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.commonTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveCommonTag(tag),\n class: \"tag-item\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('batchTag.noCommonTags')), 1))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.clearTab'),\n name: \"clear\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"p\", _hoisted_17, _toDisplayString(_ctx.$t('batchTag.clearDescription', {\n count: $options.fileCount\n })), 1), _createVNode(_component_el_alert, {\n title: _ctx.$t('batchTag.clearWarningTitle'),\n type: \"warning\",\n description: _ctx.$t('batchTag.clearWarningDesc'),\n closable: false,\n style: {\n \"margin-bottom\": \"20px\"\n },\n center: \"\"\n }, null, 8, [\"title\", \"description\"]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n type: \"danger\",\n onClick: $options.handleClearAllTags,\n loading: $data.loading\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.confirmClearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'BatchTagDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n selectedFiles: {\n type: Array,\n required: true,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n activeTab: 'add',\n inputTag: '',\n tagsToAdd: [],\n commonTags: [],\n suggestions: [],\n showSuggestions: false,\n loading: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '600px';\n },\n selectedFilesOnly() {\n // 排除文件夹,只保留文件\n return this.selectedFiles.filter(file => !file.isFolder);\n },\n fileCount() {\n return this.selectedFilesOnly.length;\n },\n fileIds() {\n return this.selectedFilesOnly.map(file => file.name);\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadCommonTags();\n } else {\n this.resetData();\n }\n },\n activeTab(newTab) {\n if (newTab === 'remove') {\n this.loadCommonTags();\n }\n }\n },\n methods: {\n resetData() {\n this.tagsToAdd = [];\n this.inputTag = '';\n this.showSuggestions = false;\n this.activeTab = 'add';\n },\n async loadCommonTags() {\n if (this.selectedFilesOnly.length === 0) {\n this.commonTags = [];\n return;\n }\n try {\n // 获取所有文件的标签\n const tagPromises = this.selectedFilesOnly.map(file => fetchWithAuth(`/api/manage/tags/${encodeURIComponent(file.name)}`, {\n method: 'GET'\n }));\n const responses = await Promise.all(tagPromises);\n const allTags = [];\n for (const response of responses) {\n if (response.ok) {\n const data = await response.json();\n allTags.push(data.tags || []);\n }\n }\n\n // 找出共有标签\n if (allTags.length > 0) {\n this.commonTags = allTags[0].filter(tag => allTags.every(tags => tags.includes(tag)));\n } else {\n this.commonTags = [];\n }\n } catch (error) {\n console.error('Error loading common tags:', error);\n ElMessage.error(this.$t('batchTag.loadCommonTagsFailed'));\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.tagsToAdd.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddInputTag();\n },\n handleAddInputTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.tagsToAdd.includes(tag)) {\n ElMessage.warning(this.$t('batchTag.tagAlreadyInList'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n this.tagsToAdd.push(tag);\n this.inputTag = '';\n this.showSuggestions = false;\n },\n removeFromToAdd(tag) {\n const index = this.tagsToAdd.indexOf(tag);\n if (index > -1) {\n this.tagsToAdd.splice(index, 1);\n }\n },\n async executeAddTags() {\n if (this.tagsToAdd.length === 0) {\n ElMessage.warning(this.$t('batchTag.pleaseAddTags'));\n return;\n }\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'add',\n tags: this.tagsToAdd\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.addSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.tagsToAdd = [];\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tags:', error);\n ElMessage.error(this.$t('batchTag.addFailed'));\n } finally {\n this.loading = false;\n }\n },\n async handleRemoveCommonTag(tag) {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.removeSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n await this.loadCommonTags();\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('batchTag.removeFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClearAllTags() {\n ElMessageBox.confirm(this.$t('batchTag.clearConfirmMessage', {\n count: this.fileCount\n }), this.$t('batchTag.clearConfirmTitle'), {\n confirmButtonText: this.$t('batchTag.clearConfirmOk'),\n cancelButtonText: this.$t('batchTag.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.executeClearTags();\n }).catch(() => {\n ElMessage.info(this.$t('batchTag.clearCancelled'));\n });\n },\n async executeClearTags() {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'set',\n tags: []\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.clearSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.commonTags = [];\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } catch (error) {\n console.error('Error clearing tags:', error);\n ElMessage.error(this.$t('batchTag.clearFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClose() {\n this.visible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchTagDialog.vue?vue&type=template&id=54f87f24&scoped=true\"\nimport script from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\nexport * from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\n\nimport \"./BatchTagDialog.vue?vue&type=style&index=0&id=54f87f24&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-54f87f24\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tag-management-container\"\n};\nconst _hoisted_2 = {\n class: \"input-section\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_4 = [\"onClick\"];\nconst _hoisted_5 = {\n class: \"current-tags-section\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_8 = {\n class: \"popular-tags-section\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_10 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_11 = {\n key: 2,\n class: \"empty-message\"\n};\nconst _hoisted_12 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_Loading = _resolveComponent(\"Loading\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('tagManagement.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_12, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('tagManagement.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('tagManagement.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_4);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.currentTags')), 1), $data.currentTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveTag(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('tagManagement.noTags')), 1))]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.popularTags')), 1), $data.popularTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.popularTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n onClick: $event => $options.handleAddPopularTag(tag),\n class: \"tag-item clickable\",\n type: \"info\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))])) : $data.loadingPopularTags ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [_createVNode(_component_el_icon, {\n class: \"is-loading\"\n }, {\n default: _withCtx(() => [_createVNode(_component_Loading)]),\n _: 1\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('tagManagement.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('tagManagement.noPopularTags')), 1))])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { ElMessage } from 'element-plus';\nimport { Loading } from '@element-plus/icons-vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'TagManagementDialog',\n components: {\n Loading\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n fileId: {\n type: String,\n required: true\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n currentTags: [],\n inputTag: '',\n suggestions: [],\n popularTags: [],\n showSuggestions: false,\n loading: false,\n loadingPopularTags: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '500px';\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadFileTags();\n this.loadPopularTags();\n }\n }\n },\n methods: {\n async loadFileTags() {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n } else {\n throw new Error('Failed to load tags');\n }\n } catch (error) {\n console.error('Error loading file tags:', error);\n ElMessage.error(this.$t('tagManagement.loadFailed'));\n }\n },\n async loadPopularTags() {\n this.loadingPopularTags = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/autocomplete?limit=20', {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.popularTags = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n }\n } catch (error) {\n console.error('Error loading popular tags:', error);\n } finally {\n this.loadingPopularTags = false;\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddTag();\n },\n async handleAddTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.currentTags.includes(tag)) {\n ElMessage.warning(this.$t('tagManagement.tagExists'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'add',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n this.inputTag = '';\n this.showSuggestions = false;\n ElMessage.success(this.$t('tagManagement.addSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n const error = await response.json();\n throw new Error(error.message || this.$t('tagManagement.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tag:', error);\n ElMessage.error(error.message || this.$t('tagManagement.addFailed'));\n }\n },\n async handleRemoveTag(tag) {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n ElMessage.success(this.$t('tagManagement.removeSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n throw new Error(this.$t('tagManagement.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('tagManagement.removeFailed'));\n }\n },\n handleAddPopularTag(tag) {\n this.inputTag = tag;\n this.handleAddTag();\n },\n handleClose() {\n this.visible = false;\n this.inputTag = '';\n this.showSuggestions = false;\n this.currentTags = [];\n this.popularTags = [];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./TagManagementDialog.vue?vue&type=template&id=1dabc380&scoped=true\"\nimport script from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\nexport * from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\n\nimport \"./TagManagementDialog.vue?vue&type=style&index=0&id=1dabc380&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1dabc380\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\";\nconst _hoisted_1 = {\n class: \"detail-actions\"\n};\nconst _hoisted_2 = {\n class: \"preview-section\"\n};\nconst _hoisted_3 = {\n class: \"preview-content\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 1\n};\nconst _hoisted_8 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"6px\"\n }\n};\nconst _hoisted_9 = {\n key: 1,\n style: {\n \"color\": \"var(--el-text-color-secondary)\"\n }\n};\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"flex-wrap\": \"wrap\",\n \"gap\": \"5px\"\n }\n};\nconst _hoisted_11 = {\n key: 1,\n style: {\n \"color\": \"var(--el-text-color-secondary)\"\n }\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('fileDetail.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $options.visible = $event),\n width: $options.dialogWidth\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [!$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('download')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.download')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 1,\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('tagManagement')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.tags')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 2,\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('block')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ban\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.blacklist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 3,\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = $event => _ctx.$emit('white')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.whitelist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 4,\n type: \"danger\",\n onClick: _cache[4] || (_cache[4] = $event => _ctx.$emit('delete')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.deleteBtn')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 5,\n type: \"warning\",\n onClick: _cache[5] || (_cache[5] = $event => $options.startEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.edit')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 6,\n type: \"info\",\n onClick: _cache[6] || (_cache[6] = $event => $options.openRenameDialog()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"i-cursor\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.rename')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 7,\n type: \"success\",\n onClick: _cache[7] || (_cache[7] = $event => $options.saveMetadata()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\",\n loading: $data.editSaving\n }, {\n default: _withCtx(() => [!$data.editSaving ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"save\",\n style: {\n \"margin-right\": \"3px\"\n }\n })) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.save')), 1)]),\n _: 1\n }, 8, [\"loading\"])) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 8,\n onClick: _cache[8] || (_cache[8] = $event => $options.cancelEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.cancel')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.activeTab = $event),\n onTabClick: $options.handleTabClick,\n style: {\n \"margin-bottom\": \"10px\"\n }\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('fileDetail.originUrl'),\n name: \"originUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.originUrl,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $props.urls.originUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: \"Markdown\",\n name: \"mdUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.mdUrl,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $props.urls.mdUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"HTML\",\n name: \"htmlUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.htmlUrl,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $props.urls.htmlUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"BBCode\",\n name: \"bbUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.bbUrl,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $props.urls.bbUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), $props.file?.metadata?.TgFileId ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 0,\n label: \"TG File ID\",\n name: \"tgId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.tgId,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $props.urls.tgId = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3Location ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 1,\n label: \"S3 Location\",\n name: \"s3Location\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3Location,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $props.urls.S3Location = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3CdnFileUrl ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 2,\n label: \"S3 CDN URL\",\n name: \"s3CdnFileUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3CdnFileUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $props.urls.S3CdnFileUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"modelValue\", \"onTabClick\"]), _createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [$options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 0,\n src: $props.fileLink,\n autoplay: \"\",\n muted: \"\",\n loop: \"\",\n class: \"video-preview\",\n onClick: _cache[17] || (_cache[17] = (...args) => $options.openImageLink && $options.openImageLink(...args))\n }, null, 8, _hoisted_4)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"audio\", {\n key: 1,\n src: $props.fileLink,\n controls: \"\",\n autoplay: \"\",\n class: \"audio-preview\"\n }, null, 8, _hoisted_5)) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n src: $props.fileLink,\n \"preview-src-list\": [$props.fileLink],\n \"preview-teleported\": true,\n fit: \"contain\",\n lazy: \"\",\n class: \"image-preview\"\n }, null, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"file-icon-detail\"\n }))])]), _createVNode(_component_el_descriptions, {\n border: \"\",\n column: $options.descColumn\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileNameLabel')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileName,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.editForm.FileName = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString($props.file?.metadata?.FileName || $props.file?.name), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileType')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileType,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.editForm.FileType = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileTypePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString($props.file?.metadata?.FileType || _ctx.$t('fileDetail.unknown')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileSizeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.fileSizeDisplay), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.imageDimensions')\n }, {\n default: _withCtx(() => [$options.imageDimensions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Width) + \" × \" + _toDisplayString($props.file?.metadata?.Height), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"display\": \"inline-flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.orientationIcon), 1)]),\n _: 1\n })])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('fileDetail.noDimensions')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadTimeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.uploadTime), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.channelTypeAndName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.Channel || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.ChannelName || '-'), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.accessStatusAndReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: $options.accessTagType,\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.accessType), 1)]),\n _: 1\n }, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Label || _ctx.$t('fileDetail.noTags')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadIP')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadIP || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadAddressLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadAddress || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileTags')\n }, {\n default: _withCtx(() => [$props.file?.metadata?.Tags && $props.file?.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.file?.metadata?.Tags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1024);\n }), 128))])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('fileDetail.noTags')), 1))]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"column\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showRenameDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showRenameDialog = $event),\n title: _ctx.$t('fileDetail.renameTitle'),\n width: $options.dialogWidth,\n \"append-to-body\": \"\"\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[21] || (_cache[21] = $event => $options.closeRenameDialog())\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameCancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[22] || (_cache[22] = $event => $options.submitRename()),\n loading: $data.renameSaving,\n disabled: !$data.renameValidation.valid\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameConfirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n onSubmit: _withModifiers($options.submitRename, [\"prevent\"])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('fileDetail.renameLabel'),\n error: $data.renameValidation.error\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.renameForm.newFileId,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.renameForm.newFileId = $event),\n placeholder: _ctx.$t('fileDetail.renamePlaceholder'),\n onInput: $options.validateRenameInput,\n clearable: \"\"\n }, null, 8, [\"modelValue\", \"placeholder\", \"onInput\"])]),\n _: 1\n }, 8, [\"label\", \"error\"])]),\n _: 1\n }, 8, [\"onSubmit\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","/**\r\n * File_ID 验证器模块\r\n * 提供 File_ID 格式验证功能,用于重命名操作的前端校验\r\n * 非法字符规则复用 pathValidator 的字符集\r\n */\r\n\r\n/**\r\n * 非法字符正则表达式\r\n * 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n * 与 pathValidator.js 保持一致\r\n */\r\nconst INVALID_CHARS = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n\r\n/**\r\n * 验证 File_ID 格式\r\n * @param {string} newFileId - 新的 File_ID\r\n * @param {string} currentFileId - 当前 File_ID\r\n * @returns {{ valid: boolean, error?: string }}\r\n */\r\nexport function validateFileId(newFileId, currentFileId) {\r\n // 1. 空值/纯空白检测\r\n if (!newFileId || newFileId.trim() === '') {\r\n return {\r\n valid: false,\r\n error: '文件名不能为空'\r\n };\r\n }\r\n\r\n // 2. 与当前 File_ID 相同检测\r\n if (newFileId === currentFileId) {\r\n return {\r\n valid: false,\r\n error: '文件名未发生变化'\r\n };\r\n }\r\n\r\n // 3. 路径穿越检测\r\n if (newFileId.includes('..')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含路径穿越字符 \"..\"'\r\n };\r\n }\r\n\r\n // 3.5 单独的 . 路径段检测(仅检查 /./ 或开头 ./,不检查末尾以允许继续输入如 .123)\r\n if (/\\/\\.\\//.test(newFileId) || /^\\.\\//.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含单独的 \".\" 路径段'\r\n };\r\n }\r\n\r\n // 4. 非法字符检测(复用 pathValidator 的字符规则)\r\n if (INVALID_CHARS.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名包含非法字符,请使用合法的文件名格式'\r\n };\r\n }\r\n\r\n // 5. 连续斜杠检测\r\n if (newFileId.includes('//')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含连续的斜杠'\r\n };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n","import { ElMessage } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFileId } from '@/utils/fileIdValidator';\nexport default {\n name: 'FileDetailDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n file: {\n type: Object,\n default: null\n },\n fileLink: {\n type: String,\n default: ''\n },\n urls: {\n type: Object,\n default: () => ({\n originUrl: '',\n mdUrl: '',\n htmlUrl: '',\n bbUrl: '',\n tgId: '',\n S3Location: '',\n S3CdnFileUrl: ''\n })\n }\n },\n emits: ['update:modelValue', 'download', 'tagManagement', 'block', 'white', 'delete', 'metadataUpdated', 'fileRenamed'],\n watch: {\n visible(val) {\n if (!val) {\n // 关闭弹窗时退出编辑状态\n this.isEditing = false;\n this.editSaving = false;\n }\n }\n },\n data() {\n return {\n activeTab: 'originUrl',\n isEditing: false,\n editForm: {\n FileName: '',\n FileType: ''\n },\n editSaving: false,\n showRenameDialog: false,\n renameForm: {\n newFileId: ''\n },\n renameValidation: {\n valid: true,\n error: ''\n },\n renameSaving: false\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '95%' : '900px';\n },\n descColumn() {\n return window.innerWidth < 768 ? 1 : 2;\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n uploadTime() {\n if (this.file?.metadata?.TimeStamp) {\n return new Date(this.file.metadata.TimeStamp).toLocaleString();\n }\n return this.$t('fileDetail.unknown');\n },\n accessType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return this.$t('fileDetail.accessNormalWhitelist');\n if (listType === 'Block') return this.$t('fileDetail.accessBlockedBlacklist');\n if (label === 'adult') return this.$t('fileDetail.accessBlockedReview');\n return this.$t('fileDetail.accessNormal');\n },\n accessTagType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return 'success';\n if (listType === 'Block') return 'danger';\n if (label === 'adult') return 'danger';\n return 'success';\n },\n imageDimensions() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (width && height) return true;\n return null;\n },\n orientationIcon() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (!width || !height) return '';\n const ratio = width / height;\n if (ratio > 1.1) return this.$t('fileDetail.orientationLandscape');\n if (ratio < 0.9) return this.$t('fileDetail.orientationPortrait');\n return this.$t('fileDetail.orientationSquare');\n },\n fileSizeDisplay() {\n const sizeBytes = this.file?.metadata?.FileSizeBytes;\n const sizeMB = this.file?.metadata?.FileSize;\n if (sizeBytes) {\n // 根据大小选择合适的单位\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(2)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return this.$t('fileDetail.unknown');\n }\n },\n methods: {\n handleVideoClick(e) {\n const video = e.target;\n if (video.paused) video.play();else video.pause();\n },\n handleTabClick() {},\n handleUrlClick(e) {\n const input = e.target;\n input.select();\n navigator.clipboard.writeText(input.value).then(() => {\n ElMessage.success(this.$t('fileDetail.linkCopied'));\n });\n },\n openImageLink() {\n if (this.fileLink) {\n window.open(this.fileLink, '_blank');\n }\n },\n startEdit() {\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.isEditing = true;\n },\n cancelEdit() {\n this.isEditing = false;\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.editSaving = false;\n },\n async saveMetadata() {\n this.editSaving = true;\n try {\n const fileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/metadata/${fileId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n FileName: this.editForm.FileName,\n FileType: this.editForm.FileType\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.metadataSaved'));\n this.isEditing = false;\n this.$emit('metadataUpdated', fileId, data.metadata);\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n }\n } catch (error) {\n console.error('Error saving metadata:', error);\n ElMessage.error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n } finally {\n this.editSaving = false;\n }\n },\n openRenameDialog() {\n this.renameForm.newFileId = this.file?.name || '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n this.showRenameDialog = true;\n },\n closeRenameDialog() {\n this.showRenameDialog = false;\n this.renameForm.newFileId = '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n },\n validateRenameInput() {\n const result = validateFileId(this.renameForm.newFileId, this.file?.name || '');\n this.renameValidation = {\n valid: result.valid,\n error: result.error || ''\n };\n },\n async submitRename() {\n if (this.renameSaving) return;\n\n // Validate input first\n this.validateRenameInput();\n if (!this.renameValidation.valid) {\n return;\n }\n this.renameSaving = true;\n try {\n const oldFileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/rename/${oldFileId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n newFileId: this.renameForm.newFileId\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.renameSuccess'));\n this.showRenameDialog = false;\n this.$emit('fileRenamed', oldFileId, this.renameForm.newFileId, data.metadata);\n } else if (response.status === 409) {\n // Conflict — target File_ID already exists\n this.renameValidation = {\n valid: false,\n error: this.$t('fileDetail.renameConflict')\n };\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.renameFailed'));\n }\n } catch (error) {\n console.error('Error renaming file:', error);\n ElMessage.error(error.message || this.$t('fileDetail.renameFailed'));\n } finally {\n this.renameSaving = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileDetailDialog.vue?vue&type=template&id=550287cc&scoped=true\"\nimport script from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\nexport * from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\n\nimport \"./FileDetailDialog.vue?vue&type=style&index=0&id=550287cc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-550287cc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"batch-floating-bar\"\n};\nconst _hoisted_2 = {\n class: \"batch-selection-summary\"\n};\nconst _hoisted_3 = {\n class: \"batch-selection-count\"\n};\nconst _hoisted_4 = {\n class: \"batch-floating-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"batch-toolbar\"\n }, {\n default: _withCtx(() => [$props.selectedCount > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.clearSelection'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"batch-floating-btn ghost\",\n \"aria-label\": _ctx.$t('dashboard.clearSelection'),\n onClick: $options.handleClear\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"batch-floating-icon\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: `${$props.selectedCount} ${_ctx.$t('dashboard.selectedItems')}`,\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.selectedCount), 1)])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _cache[0] || (_cache[0] = _createElementVNode(\"span\", {\n class: \"batch-toolbar-divider\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_4, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.actions, action => {\n return _openBlock(), _createBlock(_component_el_tooltip, {\n key: action.command,\n disabled: $options.disableTooltip,\n content: _ctx.$t(action.label),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"batch-floating-btn\", action.className]),\n \"aria-label\": _ctx.$t(action.label),\n onClick: $event => $options.handleAction(action.command)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: action.icon,\n class: \"batch-floating-icon\"\n }, null, 8, [\"icon\"])]),\n _: 2\n }, 1032, [\"class\", \"aria-label\", \"onClick\"])]),\n _: 2\n }, 1032, [\"disabled\", \"content\"]);\n }), 128))])])) : _createCommentVNode(\"\", true)]),\n _: 1\n });\n}","export default {\n name: 'BatchActionBar',\n props: {\n selectedCount: {\n type: Number,\n required: true\n }\n },\n emits: ['action', 'clear'],\n data() {\n return {\n actions: [{\n command: 'copy',\n label: 'dashboard.copy',\n icon: 'copy',\n className: 'copy'\n }, {\n command: 'download',\n label: 'dashboard.download',\n icon: 'download',\n className: 'download'\n }, {\n command: 'move',\n label: 'dashboard.move',\n icon: 'file-export',\n className: 'move'\n }, {\n command: 'tagManagement',\n label: 'dashboard.tagManagement',\n icon: 'tags',\n className: 'tag'\n }, {\n command: 'ban',\n label: 'dashboard.addToBlacklist',\n icon: 'ban',\n className: 'ban'\n }, {\n command: 'white',\n label: 'dashboard.addToWhitelist',\n icon: 'shield-alt',\n className: 'white'\n }, {\n command: 'delete',\n label: 'dashboard.delete',\n icon: 'trash-alt',\n className: 'danger'\n }]\n };\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n }\n },\n methods: {\n handleAction(command) {\n this.$emit('action', command);\n },\n handleClear() {\n this.$emit('clear');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchActionBar.vue?vue&type=template&id=49301bcc&scoped=true\"\nimport script from \"./BatchActionBar.vue?vue&type=script&lang=js\"\nexport * from \"./BatchActionBar.vue?vue&type=script&lang=js\"\n\nimport \"./BatchActionBar.vue?vue&type=style&index=0&id=49301bcc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-49301bcc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, withModifiers as _withModifiers, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_2 = [\"src\"];\nconst _hoisted_3 = [\"src\"];\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n class: \"filename-start\"\n};\nconst _hoisted_6 = {\n class: \"filename-end\"\n};\nconst _hoisted_7 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_9 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_10 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"channel-name-box\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_13 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_14 = {\n key: 0,\n class: \"address-box\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"list-item\",\n onTouchstart: _cache[10] || (_cache[10] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[11] || (_cache[11] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[12] || (_cache[12] = $event => _ctx.$emit('touchmove', $event))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.handleSelectChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), _createElementVNode(\"div\", {\n class: \"list-col list-col-preview\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [$options.isFolder ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"list-folder-icon\"\n })) : $options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: $props.fileLink,\n class: \"list-preview-img\",\n muted: \"\",\n preload: \"metadata\"\n }, null, 8, _hoisted_2)) : $options.isImage ? (_openBlock(), _createElementBlock(\"img\", {\n key: 2,\n src: $props.fileLink,\n class: \"list-preview-img\",\n loading: \"lazy\",\n decoding: \"async\"\n }, null, 8, _hoisted_3)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"list-file-icon\"\n }))]), _createElementVNode(\"div\", {\n class: \"list-col list-col-name\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [_createElementVNode(\"span\", {\n class: \"filename-ellipsis\",\n title: $options.displayName\n }, [_createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.fileNameStart), 1), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.fileNameEnd), 1)], 8, _hoisted_4)]), _createElementVNode(\"div\", _hoisted_7, [!$options.isFolder && $props.item.metadata?.Tags && $props.item.metadata.Tags.length > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.item.metadata.Tags.slice(0, 3), (tag, tagIndex) => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: tagIndex,\n class: \"color-tag\",\n style: _normalizeStyle({\n background: $options.getTagColor(tagIndex)\n })\n }, _toDisplayString(tag), 5);\n }), 128)), $props.item.metadata.Tags.length > 3 ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"color-tag color-tag-more\",\n style: _normalizeStyle({\n background: $options.getTagColor(3)\n })\n }, \"+\" + _toDisplayString($props.item.metadata.Tags.length - 3), 5)) : _createCommentVNode(\"\", true)], 64)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"-\"))]), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.isFolder ? '-' : $props.item.metadata?.Channel || $props.item.channelTag || '-'), 1), _createElementVNode(\"div\", _hoisted_10, [!$options.isFolder && $props.item.metadata?.ChannelName ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString($props.item.metadata.ChannelName), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))]), _createElementVNode(\"div\", _hoisted_13, [!$options.isFolder && $props.item.metadata?.UploadIP ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, _toDisplayString($props.item.metadata.UploadIP), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"-\"))]), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.isFolder ? '-' : $options.fileSizeDisplay), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.uploadDate), 1), _createElementVNode(\"div\", _hoisted_18, [!$options.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[6] || (_cache[6] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[7] || (_cache[7] = _withModifiers($event => _ctx.$emit('folderCopy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[8] || (_cache[8] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn list-action-danger\",\n onClick: _cache[9] || (_cache[9] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"content\"])])], 32);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FileListItem',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n default: ''\n }\n },\n emits: ['update:selected', 'enter', 'detail', 'copy', 'folderCopy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n tagColors: ['#f472b6', '#a78bfa', '#60a5fa', '#34d399']\n };\n },\n computed: {\n isFolder() {\n // 检查 isFolder 属性或名称以 / 结尾\n return this.item.isFolder || this.item.name?.endsWith('/');\n },\n isVideo() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isImage() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp');\n },\n displayName() {\n if (this.isFolder) {\n const parts = this.item.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.item.name;\n }\n return this.item.metadata?.FileName || this.getFileName(this.item.name);\n },\n fileNameStart() {\n const name = this.displayName;\n if (name.length <= 20) return name;\n return name.slice(0, -8);\n },\n fileNameEnd() {\n const name = this.displayName;\n if (name.length <= 20) return '';\n return name.slice(-8);\n },\n uploadDate() {\n if (this.item.uploaded) {\n return new Date(this.item.uploaded).toLocaleDateString();\n }\n if (this.item.metadata?.TimeStamp) {\n return new Date(this.item.metadata.TimeStamp).toLocaleDateString();\n }\n return '-';\n },\n fileSizeDisplay() {\n const sizeBytes = this.item.metadata?.FileSizeBytes;\n const sizeMB = this.item.metadata?.FileSize;\n if (sizeBytes) {\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(1)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return '-';\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n },\n methods: {\n handleSelectChange(value) {\n this.localSelected = value;\n this.$emit('update:selected', value);\n },\n handlePreviewClick() {\n if (this.isFolder) {\n this.$emit('enter');\n } else {\n this.$emit('detail');\n }\n },\n getFileName(name) {\n const parts = (name || '').split('/');\n return parts[parts.length - 1];\n },\n getTagColor(index) {\n return this.tagColors[index % this.tagColors.length];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileListItem.vue?vue&type=template&id=25a3242c&scoped=true\"\nimport script from \"./FileListItem.vue?vue&type=script&lang=js\"\nexport * from \"./FileListItem.vue?vue&type=script&lang=js\"\n\nimport \"./FileListItem.vue?vue&type=style&index=0&id=25a3242c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25a3242c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, withModifiers as _withModifiers, withCtx as _withCtx, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"file-short-info\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"success-tag\"\n};\nconst _hoisted_3 = {\n key: 1,\n class: \"fail-tag\"\n};\nconst _hoisted_4 = {\n key: 2,\n class: \"success-tag\"\n};\nconst _hoisted_5 = {\n key: 3,\n class: \"primary-tag\"\n};\nconst _hoisted_6 = {\n key: 0,\n style: {\n \"margin-left\": \"2px\"\n }\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"skeleton-wrapper\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = {\n class: \"error-text\"\n};\nconst _hoisted_11 = {\n key: 3,\n class: \"file-preview\"\n};\nconst _hoisted_12 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_13 = {\n class: \"file-name-row\"\n};\nconst _hoisted_14 = {\n class: \"file-name\"\n};\nconst _hoisted_15 = {\n class: \"action-bar\"\n};\nconst _hoisted_16 = {\n class: \"action-bar-left\"\n};\nconst _hoisted_17 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card\",\n onTouchstart: _cache[17] || (_cache[17] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[18] || (_cache[18] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[19] || (_cache[19] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", _hoisted_1, [$props.item.metadata?.ListType === 'White' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString($options.channelTag), 1)) : $props.item.metadata?.ListType === 'Block' || $props.item.metadata?.Label === 'adult' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString($options.channelTag), 1)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString($options.channelTag), 1)), $props.item.metadata?.Tags && $props.item.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [_createVNode(_component_font_awesome_icon, {\n icon: \"tag\",\n style: {\n \"margin-right\": \"3px\",\n \"font-size\": \"12px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString($props.item.metadata.Tags[0]) + \" \", 1), $props.item.metadata.Tags.length > 1 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \" (+\" + _toDisplayString($props.item.metadata.Tags.length - 1) + \") \", 1)) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)]), $options.isVideo ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [$data.videoLoading ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7)) : $data.videoError ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"error-wrapper\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])) : _createCommentVNode(\"\", true), _withDirectives(_createElementVNode(\"video\", {\n src: $props.fileLink,\n muted: \"\",\n loop: \"\",\n preload: \"metadata\",\n class: \"video-preview\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleVideoClick && $options.handleVideoClick(...args)),\n onMouseenter: _cache[4] || (_cache[4] = $event => $options.handleVideoHover($event, true)),\n onMouseleave: _cache[5] || (_cache[5] = $event => $options.handleVideoHover($event, false)),\n onFullscreenchange: _cache[6] || (_cache[6] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onWebkitfullscreenchange: _cache[7] || (_cache[7] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onLoadeddata: _cache[8] || (_cache[8] = $event => $data.videoLoading = false),\n onError: _cache[9] || (_cache[9] = (...args) => $options.handleVideoError && $options.handleVideoError(...args))\n }, null, 40, _hoisted_9), [[_vShow, !$data.videoLoading && !$data.videoError]])], 64)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-preview audio-card-preview\",\n onClick: _cache[10] || (_cache[10] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"music\",\n class: \"file-icon audio-icon\"\n })])) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n \"preview-teleported\": true,\n src: $props.fileLink,\n \"preview-src-list\": $props.previewSrcList,\n fit: \"cover\",\n lazy: \"\",\n decoding: \"async\",\n class: \"image-preview\"\n }, {\n placeholder: _withCtx(() => [...(_cache[20] || (_cache[20] = [_createElementVNode(\"div\", {\n class: \"skeleton-wrapper\"\n }, null, -1)]))]),\n error: _withCtx(() => [_createElementVNode(\"div\", {\n class: \"error-wrapper\",\n onClick: _cache[11] || (_cache[11] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"image\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])]),\n _: 1\n }, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, _toDisplayString($options.displayName), 1)]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.detail'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[12] || (_cache[12] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])]), _createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[13] || (_cache[13] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[14] || (_cache[14] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[15] || (_cache[15] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[16] || (_cache[16] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])])]),\n _: 1\n });\n}","export default {\n name: 'FileCard',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n required: true\n },\n previewSrcList: {\n type: Array,\n default: () => []\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'detail', 'copy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n videoLoading: true,\n videoError: false\n };\n },\n computed: {\n channelTag() {\n return this.item.channelTag || '';\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n displayName() {\n const fileName = this.item.metadata?.FileName || this.item.name || '';\n const parts = fileName.split('/');\n return parts[parts.length - 1];\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n },\n fileLink() {\n // 链接变化时重置加载状态\n this.videoLoading = true;\n this.videoError = false;\n }\n },\n methods: {\n handleVideoError() {\n this.videoLoading = false;\n this.videoError = true;\n },\n handleVideoClick(e) {\n const video = e.target;\n if (video.requestFullscreen) {\n video.requestFullscreen();\n } else if (video.webkitRequestFullscreen) {\n video.webkitRequestFullscreen();\n } else if (video.mozRequestFullScreen) {\n video.mozRequestFullScreen();\n } else if (video.msRequestFullscreen) {\n video.msRequestFullscreen();\n }\n },\n handleFullscreenChange(e) {\n const video = e.target;\n const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (isFullscreen) {\n // 进入全屏:取消静音和循环\n video.muted = false;\n video.loop = false;\n } else {\n // 退出全屏:恢复静音和循环,暂停并重置\n video.muted = true;\n video.loop = true;\n video.pause();\n video.currentTime = 0;\n }\n },\n handleVideoHover(e, isEnter) {\n const video = e.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileCard.vue?vue&type=template&id=956fb02e&scoped=true\"\nimport script from \"./FileCard.vue?vue&type=script&lang=js\"\nexport * from \"./FileCard.vue?vue&type=script&lang=js\"\n\nimport \"./FileCard.vue?vue&type=style&index=0&id=956fb02e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-956fb02e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_2 = {\n class: \"file-name-row\"\n};\nconst _hoisted_3 = {\n class: \"file-name\"\n};\nconst _hoisted_4 = {\n key: 0,\n class: \"action-bar\"\n};\nconst _hoisted_5 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card folder-card\",\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[8] || (_cache[8] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", {\n class: \"folder-icon\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('enter'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"folder-icon-svg\"\n })]), _createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($options.folderName), 1)]), $props.showActions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n class: \"action-bar-left\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n });\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FolderCard',\n props: {\n name: {\n type: String,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n showActions: {\n type: Boolean,\n default: true\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'enter', 'copy', 'move', 'delete', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected\n };\n },\n computed: {\n folderName() {\n const parts = this.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.name;\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FolderCard.vue?vue&type=template&id=534cf01b&scoped=true\"\nimport script from \"./FolderCard.vue?vue&type=script&lang=js\"\nexport * from \"./FolderCard.vue?vue&type=script&lang=js\"\n\nimport \"./FolderCard.vue?vue&type=style&index=0&id=534cf01b&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-534cf01b\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, createStaticVNode as _createStaticVNode } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return $props.type === 'card' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 0\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'skeleton-' + i,\n class: \"skeleton-card\"\n }, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"div\", {\n class: \"skeleton-image\"\n }, null, -1), _createElementVNode(\"div\", {\n class: \"skeleton-info\"\n }, [_createElementVNode(\"div\", {\n class: \"skeleton-text\"\n })], -1)]))]);\n }), 128)) : $props.type === 'list' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 1\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'list-skeleton-' + i,\n class: \"list-item skeleton-list-item\"\n }, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"
\", 10)]))]);\n }), 128)) : _createCommentVNode(\"\", true);\n}","export default {\n name: 'SkeletonLoader',\n props: {\n type: {\n type: String,\n default: 'card',\n validator: value => ['card', 'list'].includes(value)\n },\n count: {\n type: Number,\n default: 15\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SkeletonLoader.vue?vue&type=template&id=070880ec&scoped=true\"\nimport script from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\nexport * from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\n\nimport \"./SkeletonLoader.vue?vue&type=style&index=0&id=070880ec&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-070880ec\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withModifiers as _withModifiers, withKeys as _withKeys, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"aria-checked\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: _normalizeClass([\"dashboard-checkbox\", [`dashboard-checkbox--${$props.variant}`, {\n 'checked': $props.checked,\n 'indeterminate': $props.indeterminate && !$props.checked\n }]]),\n role: \"checkbox\",\n \"aria-checked\": $options.ariaChecked,\n tabindex: \"0\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args)),\n onKeydown: [_cache[1] || (_cache[1] = _withKeys(_withModifiers((...args) => $options.handleClick && $options.handleClick(...args), [\"prevent\"]), [\"enter\"])), _cache[2] || (_cache[2] = _withKeys(_withModifiers((...args) => $options.handleClick && $options.handleClick(...args), [\"prevent\"]), [\"space\"]))]\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.markIcon,\n class: \"dashboard-checkbox-mark\"\n }, null, 8, [\"icon\"])], 42, _hoisted_1);\n}","export default {\n name: 'DashboardCheckbox',\n props: {\n checked: {\n type: Boolean,\n default: false\n },\n indeterminate: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: 'breadcrumb',\n validator: value => ['breadcrumb'].includes(value)\n }\n },\n emits: ['click'],\n computed: {\n ariaChecked() {\n if (this.checked) return 'true';\n if (this.indeterminate) return 'mixed';\n return 'false';\n },\n markIcon() {\n return this.indeterminate && !this.checked ? 'minus' : 'check';\n }\n },\n methods: {\n handleClick(event) {\n this.$emit('click', event);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardCheckbox.vue?vue&type=template&id=3757bfa7&scoped=true\"\nimport script from \"./DashboardCheckbox.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardCheckbox.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardCheckbox.vue?vue&type=style&index=0&id=3757bfa7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3757bfa7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"el-dropdown-link filter-trigger\"\n};\nconst _hoisted_2 = {\n class: \"filter-section\"\n};\nconst _hoisted_3 = {\n class: \"filter-title\"\n};\nconst _hoisted_4 = {\n class: \"filter-options\"\n};\nconst _hoisted_5 = {\n class: \"filter-section\"\n};\nconst _hoisted_6 = {\n class: \"filter-title\"\n};\nconst _hoisted_7 = {\n class: \"filter-options\"\n};\nconst _hoisted_8 = {\n class: \"filter-section\"\n};\nconst _hoisted_9 = {\n class: \"filter-title\"\n};\nconst _hoisted_10 = {\n class: \"filter-options\"\n};\nconst _hoisted_11 = {\n class: \"filter-section\"\n};\nconst _hoisted_12 = {\n class: \"filter-title\"\n};\nconst _hoisted_13 = {\n class: \"filter-options\"\n};\nconst _hoisted_14 = {\n class: \"filter-section\"\n};\nconst _hoisted_15 = {\n class: \"filter-title\"\n};\nconst _hoisted_16 = {\n class: \"filter-options\"\n};\nconst _hoisted_17 = {\n key: 0,\n class: \"filter-section\"\n};\nconst _hoisted_18 = {\n class: \"filter-title\"\n};\nconst _hoisted_19 = {\n class: \"filter-options\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"channel-divider\"\n};\nconst _hoisted_21 = {\n class: \"channel-group-title\"\n};\nconst _hoisted_22 = {\n class: \"filter-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_badge = _resolveComponent(\"el-badge\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n return _openBlock(), _createBlock(_component_el_dropdown, {\n \"hide-on-click\": false,\n trigger: \"click\",\n class: \"filter-dropdown\",\n ref: \"dropdownRef\"\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"filter-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('filter.accessStatus')), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.accessStatus,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localFilters.accessStatus = $event),\n onChange: _cache[1] || (_cache[1] = $event => $options.handleFilterChange('accessStatus'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.accessStatusOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'accessStatus-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.$t('filter.blackWhiteList')), 1), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.listType,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.localFilters.listType = $event),\n onChange: _cache[3] || (_cache[3] = $event => $options.handleFilterChange('listType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.listTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'listType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('filter.reviewResult')), 1), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.label,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.localFilters.label = $event),\n onChange: _cache[5] || (_cache[5] = $event => $options.handleFilterChange('label'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.labelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'label-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, _toDisplayString(_ctx.$t('filter.fileType')), 1), _createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.fileType,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.localFilters.fileType = $event),\n onChange: _cache[7] || (_cache[7] = $event => $options.handleFilterChange('fileType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.fileTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'fileType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('filter.channelType')), 1), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channel,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.localFilters.channel = $event),\n onChange: _cache[9] || (_cache[9] = $event => $options.handleFilterChange('channel'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.channelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channel-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), $props.channelNameOptions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('filter.channelName')), 1), _createElementVNode(\"div\", _hoisted_19, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.localFilters.channelName = $event),\n onChange: _cache[11] || (_cache[11] = $event => $options.handleFilterChange('channelName'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedChannelNames, (group, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: 'group-' + group.type\n }, [index > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(group.typeLabel), 1), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.channels, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channelName-' + option.type + '-' + option.name,\n label: option.type + ':' + option.name\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.name), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))], 64);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_el_button, {\n size: \"small\",\n onClick: $options.clearFilters,\n disabled: $options.activeFilterCount === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('filter.clearFilters')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_1, [_createVNode(_component_el_badge, {\n value: $options.activeFilterCount,\n hidden: $options.activeFilterCount === 0,\n class: \"filter-badge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"filter\",\n class: \"header-icon\"\n })]),\n _: 1\n }, 8, [\"value\", \"hidden\"])])]),\n _: 1\n }, 512);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nexport default {\n name: 'FilterDropdown',\n props: {\n filters: {\n type: Object,\n default: () => ({\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'none'\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n })\n },\n channelNameOptions: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:filters', 'change'],\n data() {\n return {\n localFilters: {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n }\n };\n },\n computed: {\n // 访问状态选项(综合判断 ListType 和 Label)\n // 正常: ListType !== 'Block' && Label !== 'adult'\n // 已屏蔽: ListType === 'Block' || Label === 'adult'\n accessStatusOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.blocked'),\n value: 'blocked'\n }];\n },\n // 黑白名单选项(直接使用 ListType 字段值)\n listTypeOptions() {\n return [{\n label: this.$t('filter.whiteList'),\n value: 'White'\n }, {\n label: this.$t('filter.blackList'),\n value: 'Block'\n }, {\n label: this.$t('filter.notSet'),\n value: 'None'\n }];\n },\n // 审查结果选项\n labelOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.teenContent'),\n value: 'teen'\n }, {\n label: this.$t('filter.adultContent'),\n value: 'adult'\n }];\n },\n fileTypeOptions() {\n return [{\n label: this.$t('filter.image'),\n value: 'image'\n }, {\n label: this.$t('filter.video'),\n value: 'video'\n }, {\n label: this.$t('filter.audio'),\n value: 'audio'\n }, {\n label: this.$t('filter.other'),\n value: 'other'\n }];\n },\n channelOptions() {\n return [{\n label: 'Telegram',\n value: 'TelegramNew'\n }, {\n label: 'Cloudflare R2',\n value: 'CloudflareR2'\n }, {\n label: 'S3',\n value: 'S3'\n }, {\n label: 'Discord',\n value: 'Discord'\n }, {\n label: 'HuggingFace',\n value: 'HuggingFace'\n }, {\n label: 'WebDAV',\n value: 'WebDAV'\n }, {\n label: this.$t('filter.externalLink'),\n value: 'External'\n }];\n },\n activeFilterCount() {\n return Object.values(this.localFilters).reduce((count, arr) => count + arr.length, 0);\n },\n // 按类型分组渠道名称\n groupedChannelNames() {\n const groups = {};\n this.channelNameOptions.forEach(option => {\n if (!groups[option.type]) {\n groups[option.type] = {\n type: option.type,\n typeLabel: option.typeLabel,\n channels: []\n };\n }\n groups[option.type].channels.push(option);\n });\n return Object.values(groups);\n }\n },\n watch: {\n filters: {\n handler(newFilters) {\n this.localFilters = {\n accessStatus: Array.isArray(newFilters.accessStatus) ? [...newFilters.accessStatus] : [],\n listType: Array.isArray(newFilters.listType) ? [...newFilters.listType] : [],\n label: Array.isArray(newFilters.label) ? [...newFilters.label] : [],\n fileType: Array.isArray(newFilters.fileType) ? [...newFilters.fileType] : [],\n channel: Array.isArray(newFilters.channel) ? [...newFilters.channel] : [],\n channelName: Array.isArray(newFilters.channelName) ? [...newFilters.channelName] : []\n };\n },\n immediate: true,\n deep: true\n }\n },\n methods: {\n handleFilterChange(type) {\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type,\n filters: {\n ...this.localFilters\n }\n });\n },\n clearFilters() {\n this.localFilters = {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type: 'clear',\n filters: {\n ...this.localFilters\n }\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FilterDropdown.vue?vue&type=template&id=68ddb899&scoped=true\"\nimport script from \"./FilterDropdown.vue?vue&type=script&lang=js\"\nexport * from \"./FilterDropdown.vue?vue&type=script&lang=js\"\n\nimport \"./FilterDropdown.vue?vue&type=style&index=0&id=68ddb899&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-68ddb899\"]])\n\nexport default __exports__","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, withKeys as _withKeys, withCtx as _withCtx, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content admin-header-content\"\n};\nconst _hoisted_3 = {\n class: \"search-area\"\n};\nconst _hoisted_4 = {\n class: \"search-card\"\n};\nconst _hoisted_5 = {\n class: \"actions\"\n};\nconst _hoisted_6 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_7 = {\n class: \"breadcrumb-container\"\n};\nconst _hoisted_8 = [\"title\", \"aria-pressed\"];\nconst _hoisted_9 = [\"title\", \"aria-pressed\"];\nconst _hoisted_10 = [\"title\"];\nconst _hoisted_11 = {\n class: \"breadcrumb-sort-icon\",\n viewBox: \"0 0 30 18\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_12 = {\n key: 0,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_13 = {\n key: 1,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_14 = {\n key: 2,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_15 = {\n key: 3,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_16 = {\n key: 4,\n class: \"sort-order-glyph\",\n d: \"M23 13.5V4.5M19 8.5L23 4.5L27 8.5\"\n};\nconst _hoisted_17 = {\n key: 5,\n class: \"sort-order-glyph\",\n d: \"M23 4.5V13.5M19 9.5L23 13.5L27 9.5\"\n};\nconst _hoisted_18 = {\n class: \"sort-order-wrapper\"\n};\nconst _hoisted_19 = {\n class: \"mobile-directory-path\"\n};\nconst _hoisted_20 = {\n class: \"breadcrumb desktop-only\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n key: 1,\n class: \"empty-state\"\n};\nconst _hoisted_23 = {\n class: \"empty-text\"\n};\nconst _hoisted_24 = {\n class: \"empty-hint\"\n};\nconst _hoisted_25 = {\n class: \"list-header\"\n};\nconst _hoisted_26 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_27 = {\n class: \"list-col list-col-preview\"\n};\nconst _hoisted_28 = {\n class: \"list-col list-col-name\"\n};\nconst _hoisted_29 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_30 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_31 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_32 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_33 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_34 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_35 = {\n class: \"list-col list-col-actions\"\n};\nconst _hoisted_36 = {\n key: 1,\n class: \"empty-state list-empty\"\n};\nconst _hoisted_37 = {\n class: \"empty-text\"\n};\nconst _hoisted_38 = {\n class: \"empty-hint\"\n};\nconst _hoisted_39 = {\n class: \"pagination-container\"\n};\nconst _hoisted_40 = {\n class: \"pagination-center\"\n};\nconst _hoisted_41 = {\n class: \"pagination-right\"\n};\nconst _hoisted_42 = {\n class: \"page-total\"\n};\nconst _hoisted_43 = {\n class: \"page-jump\"\n};\nconst _hoisted_44 = {\n class: \"dialog-section\"\n};\nconst _hoisted_45 = {\n class: \"section-header\"\n};\nconst _hoisted_46 = {\n class: \"section-title\"\n};\nconst _hoisted_47 = {\n class: \"section-content\"\n};\nconst _hoisted_48 = {\n class: \"dialog-section\"\n};\nconst _hoisted_49 = {\n class: \"section-header\"\n};\nconst _hoisted_50 = {\n class: \"section-title\"\n};\nconst _hoisted_51 = {\n class: \"section-content\"\n};\nconst _hoisted_52 = {\n class: \"setting-item\"\n};\nconst _hoisted_53 = {\n class: \"setting-label\"\n};\nconst _hoisted_54 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_55 = {\n class: \"setting-label\"\n};\nconst _hoisted_56 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_FilterDropdown = _resolveComponent(\"FilterDropdown\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_DashboardCheckbox = _resolveComponent(\"DashboardCheckbox\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_divider = _resolveComponent(\"el-divider\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_el_breadcrumb_item = _resolveComponent(\"el-breadcrumb-item\");\n const _component_el_breadcrumb = _resolveComponent(\"el-breadcrumb\");\n const _component_SkeletonLoader = _resolveComponent(\"SkeletonLoader\");\n const _component_FolderCard = _resolveComponent(\"FolderCard\");\n const _component_FileCard = _resolveComponent(\"FileCard\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_FileListItem = _resolveComponent(\"FileListItem\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_main = _resolveComponent(\"el-main\");\n const _component_el_container = _resolveComponent(\"el-container\");\n const _component_BatchActionBar = _resolveComponent(\"BatchActionBar\");\n const _component_FileDetailDialog = _resolveComponent(\"FileDetailDialog\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_TagManagementDialog = _resolveComponent(\"TagManagementDialog\");\n const _component_BatchTagDialog = _resolveComponent(\"BatchTagDialog\");\n const _component_MobileActionSheet = _resolveComponent(\"MobileActionSheet\");\n const _component_MobileDirectoryDrawer = _resolveComponent(\"MobileDirectoryDrawer\");\n const _component_MoveFileDialog = _resolveComponent(\"MoveFileDialog\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_container, null, {\n default: _withCtx(() => [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"dashboard\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.tempSearch,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.tempSearch = $event),\n size: \"small\",\n placeholder: _ctx.$t('dashboard.searchPlaceholder'),\n onKeyup: _withKeys($options.handleSearch, [\"enter\"])\n }, {\n suffix: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"search\",\n class: \"search-icon\",\n onClick: $options.handleSearch\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\"])]), _createVNode(_component_FilterDropdown, {\n filters: $data.filters,\n \"onUpdate:filters\": _cache[1] || (_cache[1] = $event => $data.filters = $event),\n channelNameOptions: $data.channelNameOptions,\n onChange: $options.handleFilterChange\n }, null, 8, [\"filters\", \"channelNameOptions\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.linkFormat'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"header-icon\",\n onClick: _cache[2] || (_cache[2] = $event => $data.showUrlDialog = true)\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.logout'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_el_main, {\n class: _normalizeClass([\"main-container\", {\n 'has-batch-toolbar': $data.selectedFiles.length > 0\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_DashboardCheckbox, {\n checked: $options.selectPage,\n indeterminate: $options.selectedPageFiles && !$options.selectPage,\n variant: \"breadcrumb\",\n onClick: $options.handleSelectPage\n }, null, 8, [\"checked\", \"indeterminate\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"breadcrumb-view-toggle\", {\n 'is-list': $data.viewMode === 'list'\n }]),\n role: \"group\"\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"breadcrumb-view-button\", {\n 'is-active': $data.viewMode === 'card'\n }]),\n type: \"button\",\n title: _ctx.$t('dashboard.cardView'),\n \"aria-pressed\": $data.viewMode === 'card',\n onClick: _cache[3] || (_cache[3] = $event => $options.setViewMode('card'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"th-large\",\n class: \"breadcrumb-view-icon\"\n })], 10, _hoisted_8), _createElementVNode(\"button\", {\n class: _normalizeClass([\"breadcrumb-view-button\", {\n 'is-active': $data.viewMode === 'list'\n }]),\n type: \"button\",\n title: _ctx.$t('dashboard.listView'),\n \"aria-pressed\": $data.viewMode === 'list',\n onClick: _cache[4] || (_cache[4] = $event => $options.setViewMode('list'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"list\",\n class: \"breadcrumb-view-icon\"\n })], 10, _hoisted_9)], 2), _createVNode(_component_el_dropdown, {\n trigger: \"click\",\n class: \"breadcrumb-sort-dropdown\",\n onCommand: $options.setSortField\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"sort-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_radio_group, {\n modelValue: $data.sortOrder,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.sortOrder = $event),\n size: \"small\",\n onChange: $options.setSortOrder\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"asc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortAsc')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"desc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortDesc')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])]), _createVNode(_component_el_divider, {\n class: \"sort-divider\"\n }), _createVNode(_component_el_dropdown_item, {\n command: \"time\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'time'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByTime')), 1), $data.sortField === 'time' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"size\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'size'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortBySize')), 1), $data.sortField === 'size' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"rawName\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'rawName'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByRawName')), 1), $data.sortField === 'rawName' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"fileName\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'fileName'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByFileName')), 1), $data.sortField === 'fileName' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"breadcrumb-sort-button\",\n type: \"button\",\n title: $options.sortLabel\n }, [(_openBlock(), _createElementBlock(\"svg\", _hoisted_11, [$data.sortField === 'time' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_12, [...(_cache[32] || (_cache[32] = [_createElementVNode(\"circle\", {\n cx: \"7.5\",\n cy: \"9\",\n r: \"5.5\"\n }, null, -1), _createElementVNode(\"path\", {\n d: \"M7.5 5.5V9L10 10.5\"\n }, null, -1)]))])) : $data.sortField === 'size' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_13, [...(_cache[33] || (_cache[33] = [_createElementVNode(\"path\", {\n d: \"M2 4H13M2 9H10M2 14H7\"\n }, null, -1)]))])) : $data.sortField === 'rawName' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_14, [...(_cache[34] || (_cache[34] = [_createElementVNode(\"path\", {\n d: \"M5.5 3L4 15M11 3L9.5 15M2.5 7H13M2 11H12.5\"\n }, null, -1)]))])) : (_openBlock(), _createElementBlock(\"g\", _hoisted_15, [...(_cache[35] || (_cache[35] = [_createElementVNode(\"path\", {\n d: \"M2.5 14L7.5 3L12.5 14M4.3 10H10.7\"\n }, null, -1)]))])), $data.sortOrder === 'asc' ? (_openBlock(), _createElementBlock(\"path\", _hoisted_16)) : (_openBlock(), _createElementBlock(\"path\", _hoisted_17))]))], 8, _hoisted_10)]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: \"mobile-directory-trigger\",\n onClick: _cache[6] || (_cache[6] = $event => $data.showMobileDirectoryDrawer = true)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"mobile-directory-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, _toDisplayString($data.currentPath && $data.currentPath.split('/').filter(Boolean).length > 0 ? $data.currentPath.split('/').filter(Boolean).pop() : _ctx.$t('dashboard.rootDirectory')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"mobile-directory-arrow\"\n })]), _createElementVNode(\"div\", _hoisted_20, [_createVNode(_component_el_breadcrumb, {\n separator: \"/\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_breadcrumb_item, {\n onClick: _cache[7] || (_cache[7] = $event => $options.navigateToFolder(''))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"breadcrumb-home-icon\"\n })]),\n _: 1\n }), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentPath.split('/').filter(Boolean), (folder, index) => {\n return _openBlock(), _createBlock(_component_el_breadcrumb_item, {\n key: index,\n onClick: $event => $options.navigateToFolder($data.currentPath.split('/').filter(Boolean).slice(0, index + 1).join('/'))\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(folder), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))]),\n _: 1\n })]), _createElementVNode(\"span\", {\n class: \"stats-badge\",\n title: _ctx.$t('dashboard.totalFiles', {\n count: _ctx.$data.Number\n })\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"stats-badge-icon\"\n }), _createTextVNode(\" \" + _toDisplayString($data.Number), 1)], 8, _hoisted_21)]), $data.viewMode === 'card' ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"content\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"cardContainerRef\",\n onTouchstartPassive: _cache[8] || (_cache[8] = (...args) => $options.handlePageSwipeStart && $options.handlePageSwipeStart(...args)),\n onTouchendPassive: _cache[9] || (_cache[9] = (...args) => $options.handlePageSwipeEnd && $options.handlePageSwipeEnd(...args)),\n onTouchcancelPassive: _cache[10] || (_cache[10] = (...args) => $options.resetPageSwipe && $options.resetPageSwipe(...args))\n }, [$data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"card\",\n count: $data.pageSize\n }, null, 8, [\"count\"])) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_23, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_24, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: index\n }, [$options.isFolder(item) ? (_openBlock(), _createBlock(_component_FolderCard, {\n key: 0,\n name: item.name,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n showActions: !$data.isSearchMode,\n disableTooltip: $options.disableTooltip,\n onEnter: $event => $options.enterFolder(item.name),\n onCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onTouchstart: $event => $options.handleFolderTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"name\", \"selected\", \"onUpdate:selected\", \"showActions\", \"disableTooltip\", \"onEnter\", \"onCopy\", \"onMove\", \"onDelete\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"])) : (_openBlock(), _createBlock(_component_FileCard, {\n key: 1,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n previewSrcList: item.previewSrcList,\n disableTooltip: $options.disableTooltip,\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"previewSrcList\", \"disableTooltip\", \"onDetail\", \"onCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]))], 64);\n }), 128))], 34)) : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"list-view\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"listContainerRef\",\n onTouchstartPassive: _cache[12] || (_cache[12] = (...args) => $options.handlePageSwipeStart && $options.handlePageSwipeStart(...args)),\n onTouchendPassive: _cache[13] || (_cache[13] = (...args) => $options.handlePageSwipeEnd && $options.handlePageSwipeEnd(...args)),\n onTouchcancelPassive: _cache[14] || (_cache[14] = (...args) => $options.resetPageSwipe && $options.resetPageSwipe(...args))\n }, [_createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_el_checkbox, {\n \"model-value\": $options.isSelectAll,\n indeterminate: $options.isIndeterminate,\n onClick: _cache[11] || (_cache[11] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.handleSelectAllPage\n }, null, 8, [\"model-value\", \"indeterminate\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_27, _toDisplayString(_ctx.$t('dashboard.preview')), 1), _createElementVNode(\"div\", _hoisted_28, _toDisplayString(_ctx.$t('dashboard.fileName')), 1), _createElementVNode(\"div\", _hoisted_29, _toDisplayString(_ctx.$t('dashboard.tags')), 1), _createElementVNode(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('dashboard.channelType')), 1), _createElementVNode(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('dashboard.channelNameCol')), 1), _createElementVNode(\"div\", _hoisted_32, _toDisplayString(_ctx.$t('dashboard.uploadAddress')), 1), _createElementVNode(\"div\", _hoisted_33, _toDisplayString(_ctx.$t('dashboard.fileSize')), 1), _createElementVNode(\"div\", _hoisted_34, _toDisplayString(_ctx.$t('dashboard.uploadTime')), 1), _createElementVNode(\"div\", _hoisted_35, _toDisplayString(_ctx.$t('dashboard.actions')), 1)]), $data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"list\",\n count: $data.pageSize\n }, null, 8, [\"count\"])) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_37, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_38, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createBlock(_component_FileListItem, {\n key: index,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n onEnter: $event => $options.enterFolder(item.name),\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onFolderCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.isFolder(item) ? $options.handleFolderTouchStart(item, index) : $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"onEnter\", \"onDetail\", \"onCopy\", \"onFolderCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]);\n }), 128))], 34)), $setup.isDragging ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"drag-select-overlay\",\n style: _normalizeStyle({\n position: 'fixed',\n left: $setup.selectionRect.left + 'px',\n top: $setup.selectionRect.top + 'px',\n width: $setup.selectionRect.width + 'px',\n height: $setup.selectionRect.height + 'px'\n })\n }, null, 4)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $options.filteredTableData.length,\n \"page-size\": $data.pageSize,\n \"current-page\": $data.currentPage,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"page-size\", \"current-page\", \"pager-count\", \"onCurrentChange\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.refreshFileList,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync\",\n class: _normalizeClass({\n 'fa-spin': $data.refreshLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"]), $data.currentPage === Math.ceil($options.filteredTableData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_41, [_createElementVNode(\"span\", _hoisted_42, _toDisplayString(_ctx.$t('dashboard.totalPages', {\n count: $options.realTotalPages\n })), 1), _createElementVNode(\"div\", _hoisted_43, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.jumpTo')), 1), _createVNode(_component_el_input, {\n modelValue: $data.jumpPage,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.jumpPage = $event),\n size: \"small\",\n class: \"jump-input\",\n onKeyup: _withKeys($options.handleJumpPage, [\"enter\"])\n }, null, 8, [\"modelValue\", \"onKeyup\"]), _createVNode(_component_el_button, {\n size: \"small\",\n type: \"primary\",\n onClick: $options.handleJumpPage,\n class: \"jump-btn\"\n }, {\n default: _withCtx(() => [...(_cache[36] || (_cache[36] = [_createTextVNode(\"GO\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])])])])]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n }), _createVNode(_component_BatchActionBar, {\n \"selected-count\": $data.selectedFiles.length,\n onAction: $options.handleBatchAction,\n onClear: $options.clearSelection\n }, null, 8, [\"selected-count\", \"onAction\", \"onClear\"]), _createVNode(_component_FileDetailDialog, {\n modelValue: $data.showdetailDialog,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.showdetailDialog = $event),\n file: $data.detailFile,\n fileLink: $options.getFileLink($data.detailFile?.name),\n urls: $options.allUrl,\n onDownload: _cache[17] || (_cache[17] = $event => $options.handleDownload($data.detailFile?.name)),\n onTagManagement: _cache[18] || (_cache[18] = $event => $options.handleTagManagement($data.detailFile?.name)),\n onBlock: _cache[19] || (_cache[19] = $event => $options.handleBlock($data.detailFile?.name)),\n onWhite: _cache[20] || (_cache[20] = $event => $options.handleWhite($data.detailFile?.name)),\n onDelete: _cache[21] || (_cache[21] = $event => $options.handleDetailDelete($data.detailFile?.name)),\n onMetadataUpdated: $options.handleMetadataUpdated,\n onFileRenamed: $options.handleFileRenamed\n }, null, 8, [\"modelValue\", \"file\", \"fileLink\", \"urls\", \"onMetadataUpdated\", \"onFileRenamed\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('dashboard.linkFormat'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_44, [_createElementVNode(\"div\", _hoisted_45, [_createElementVNode(\"span\", _hoisted_46, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_47, [_createVNode(_component_el_radio_group, {\n modelValue: $data.defaultUrlFormat,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.defaultUrlFormat = $event),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"originUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"mdUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[37] || (_cache[37] = _createElementVNode(\"span\", null, \"Markdown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"htmlUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[38] || (_cache[38] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"bbUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[39] || (_cache[39] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"tgId\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"radio-icon\"\n }), _cache[40] || (_cache[40] = _createElementVNode(\"span\", null, \"TG File ID\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3Location\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.s3Link')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_48, [_createElementVNode(\"div\", _hoisted_49, [_createElementVNode(\"span\", _hoisted_50, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_51, [_createElementVNode(\"div\", _hoisted_52, [_createElementVNode(\"span\", _hoisted_53, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_54, [_createElementVNode(\"span\", _hoisted_55, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_56, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[25] || (_cache[25] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_TagManagementDialog, {\n modelValue: $data.showTagDialog,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.showTagDialog = $event),\n fileId: $data.currentTagFile,\n onTagsUpdated: $options.handleTagsUpdated\n }, null, 8, [\"modelValue\", \"fileId\", \"onTagsUpdated\"]), _createVNode(_component_BatchTagDialog, {\n modelValue: $data.showBatchTagDialog,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.showBatchTagDialog = $event),\n selectedFiles: $data.selectedFiles,\n onTagsUpdated: $options.handleBatchTagsUpdated\n }, null, 8, [\"modelValue\", \"selectedFiles\", \"onTagsUpdated\"]), _createVNode(_component_MobileActionSheet, {\n modelValue: $data.showMobileActionModal,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.showMobileActionModal = $event),\n title: $data.mobileActionIsFolder ? $options.getFolderName($data.mobileActionFile?.name || '') : $data.mobileActionFile?.metadata?.FileName || $options.getFileName($data.mobileActionFile?.name || ''),\n isFolder: $data.mobileActionIsFolder,\n onAction: $options.handleMobileAction\n }, null, 8, [\"modelValue\", \"title\", \"isFolder\", \"onAction\"]), _createVNode(_component_MobileDirectoryDrawer, {\n modelValue: $data.showMobileDirectoryDrawer,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.showMobileDirectoryDrawer = $event),\n currentPath: $data.currentPath,\n onNavigate: $options.navigateToFolder,\n onGoBack: $options.handleGoBack\n }, null, 8, [\"modelValue\", \"currentPath\", \"onNavigate\", \"onGoBack\"]), _createVNode(_component_MoveFileDialog, {\n modelValue: $data.showMoveDialog,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.showMoveDialog = $event),\n \"current-directory\": $data.currentPath,\n \"is-batch-move\": $data.isBatchMove,\n \"initial-path\": $data.moveTargetPath,\n onConfirm: $options.confirmMove\n }, null, 8, [\"modelValue\", \"current-directory\", \"is-batch-move\", \"initial-path\", \"onConfirm\"])]);\n}","// 文件管理器工具类\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { ElMessage } from 'element-plus';\r\nimport i18n from '@/locales';\r\n\r\nclass FileManager {\r\n constructor() {\r\n this.FILE_LIST_PATH = 'data/fileList.json';\r\n this.fileListCache = null;\r\n this.storageWarningShown = false;\r\n }\r\n\r\n // 从本地存储读取文件列表\r\n getLocalFileList() {\r\n const fileList = this.getMutableFileList();\r\n return {\r\n ...fileList,\r\n files: [...(fileList.files || [])],\r\n directories: [...(fileList.directories || [])],\r\n };\r\n }\r\n\r\n getMutableFileList() {\r\n if (this.fileListCache) {\r\n return this.fileListCache;\r\n }\r\n\r\n try {\r\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\r\n this.fileListCache = fileList ? JSON.parse(fileList) : this.createEmptyFileList();\r\n return this.fileListCache;\r\n } catch (error) {\r\n console.error('Error reading local file list:', error);\r\n this.fileListCache = this.createEmptyFileList();\r\n return this.fileListCache;\r\n }\r\n }\r\n\r\n // 更新内存缓存,并尽量持久化到 localStorage\r\n updateFileListCache(fileList) {\r\n this.fileListCache = fileList || this.createEmptyFileList();\r\n const persisted = this.persistFileListCache();\r\n\r\n return {\r\n cacheUpdated: true,\r\n persisted,\r\n };\r\n }\r\n\r\n persistFileListCache() {\r\n try {\r\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(this.fileListCache));\r\n return true;\r\n } catch (error) {\r\n this.handleStoragePersistError(error);\r\n return false;\r\n }\r\n }\r\n\r\n createEmptyFileList() {\r\n return { files: [], directories: [] };\r\n }\r\n\r\n handleStoragePersistError(error) {\r\n console.warn('File list is kept in memory because localStorage persistence failed:', error);\r\n\r\n try {\r\n localStorage.removeItem(this.FILE_LIST_PATH);\r\n } catch (removeError) {\r\n console.warn('Failed to remove stale file list cache:', removeError);\r\n }\r\n\r\n if (!this.storageWarningShown) {\r\n this.storageWarningShown = true;\r\n ElMessage.warning(i18n.global.t('dashboard.fileListMemoryCacheWarning'));\r\n }\r\n }\r\n\r\n // 添加新文件到列表\r\n addFile(newFile) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n fileList.files.push(newFile);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error adding file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件夹\r\n addFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n if (!fileList.directories.includes(folderName)) {\r\n fileList.directories.push(folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n }\r\n return false; // 文件夹已存在\r\n } catch (error) {\r\n console.error('Error adding folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 移动文件或文件夹\r\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n \r\n if (isFolder) {\r\n // 更新目录列表\r\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\r\n if (oldFolderIndex !== -1) {\r\n fileList.directories.splice(oldFolderIndex, 1);\r\n }\r\n\r\n } else {\r\n // 移动单个文件\r\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\r\n if (fileIndex !== -1) {\r\n // 从旧位置移除\r\n fileList.files.splice(fileIndex, 1);\r\n }\r\n\r\n }\r\n\r\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\r\n if (newPath.startsWith(currentPath)) {\r\n const pathArray = newPath.substring(currentPath.length).split('/');\r\n if (pathArray.length > 1) {\r\n const newFolder = currentPath + pathArray[0];\r\n if (!fileList.directories.includes(newFolder)) {\r\n fileList.directories.push(newFolder);\r\n }\r\n }\r\n }\r\n\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error moving file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件\r\n removeFile(fileName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => file.name !== fileName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\r\n removeFolder(folderName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\r\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 获取指定目录下的文件和子目录\r\n getFilesInFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\r\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\r\n return { files, directories: subdirectories };\r\n } catch (error) {\r\n console.error('Error getting files in folder:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 构建筛选参数URL\r\n buildFilterParams(filters) {\r\n let params = '';\r\n // 访问状态筛选(综合判断)\r\n if (filters.accessStatus && filters.accessStatus.length > 0) {\r\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\r\n }\r\n // 黑白名单筛选(直接使用 ListType 字段)\r\n if (filters.listType && filters.listType.length > 0) {\r\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\r\n }\r\n if (filters.label && filters.label.length > 0) {\r\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\r\n }\r\n if (filters.fileType && filters.fileType.length > 0) {\r\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\r\n }\r\n if (filters.channel && filters.channel.length > 0) {\r\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\r\n }\r\n if (filters.channelName && filters.channelName.length > 0) {\r\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\r\n }\r\n return params;\r\n }\r\n\r\n // 更新文件列表\r\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\r\n search = search.trim();\r\n try {\r\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n \r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n const newFileList = await response.json();\r\n if (!newFileList.isIndexedResponse) {\r\n ElMessage.warning(i18n.global.t('dashboard.indexingWarning'));\r\n }\r\n // 保存包含新字段的完整数据\r\n return this.updateFileListCache(newFileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error refreshing file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 读取更多数据\r\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\r\n search = search.trim();\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const start = fileList.files.length;\r\n\r\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n\r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n \r\n const moreFiles = await response.json();\r\n fileList.files.push(...moreFiles.files);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error loading more files:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n}\r\n\r\nexport const fileManager = new FileManager();\r\n","/**\r\n * 矩形工具函数\r\n * 用于框选(rubber-band selection)功能中的矩形计算和相交检测\r\n */\r\n\r\n/**\r\n * 判断两个矩形是否相交\r\n * @param {Object} rectA - { left, top, right, bottom }\r\n * @param {Object} rectB - { left, top, right, bottom }\r\n * @returns {boolean} 是否存在重叠区域\r\n */\r\nexport function rectIntersects(rectA, rectB) {\r\n return !(\r\n rectA.right <= rectB.left ||\r\n rectA.left >= rectB.right ||\r\n rectA.bottom <= rectB.top ||\r\n rectA.top >= rectB.bottom\r\n );\r\n}\r\n\r\n/**\r\n * 根据起始点和当前点计算选区矩形\r\n * @param {Object} start - { x, y } 起始鼠标坐标\r\n * @param {Object} current - { x, y } 当前鼠标坐标\r\n * @returns {Object} { left, top, width, height, right, bottom }\r\n */\r\nexport function calcSelectionRect(start, current) {\r\n const left = Math.min(start.x, current.x);\r\n const top = Math.min(start.y, current.y);\r\n const width = Math.abs(current.x - start.x);\r\n const height = Math.abs(current.y - start.y);\r\n return { left, top, width, height, right: left + width, bottom: top + height };\r\n}\r\n","import { ref, watch, onMounted, onBeforeUnmount, toValue } from 'vue';\r\nimport { rectIntersects, calcSelectionRect } from './rectIntersects.js';\r\n\r\n/**\r\n * Vue 3 Composable:框选(rubber-band selection)核心逻辑,支持多视图模式\r\n *\r\n * @param {Object} options\r\n * @param {Object} options.modes - Per-view-mode configuration\r\n * @param {Object} options.modes.card - Card view config\r\n * @param {import('vue').Ref} options.modes.card.containerRef\r\n * @param {string} options.modes.card.itemSelector - e.g. '.img-card'\r\n * @param {Object} options.modes.list - List view config\r\n * @param {import('vue').Ref} options.modes.list.containerRef\r\n * @param {string} options.modes.list.itemSelector - e.g. '.list-item'\r\n * @param {string} [options.mainSelector='.main-container'] - 主内容区域的 CSS 选择器,框选只能从该区域内开始\r\n * @param {import('vue').Ref} options.viewMode - 当前视图模式\r\n * @param {import('vue').Ref} options.items - 当前页的数据项(paginatedTableData)\r\n * @returns {{ isDragging: import('vue').Ref, selectionRect: import('vue').Ref }}\r\n */\r\nexport function useDragSelect(options) {\r\n const {\r\n modes,\r\n mainSelector = '.main-container',\r\n viewMode,\r\n items,\r\n } = options;\r\n\r\n // --- Reactive state ---\r\n const isDragging = ref(false);\r\n const selectionRect = ref({ left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 });\r\n\r\n // --- Internal (non-reactive) state ---\r\n let startPoint = null; // { x, y } viewport coordinates at mousedown\r\n let preSelectSnapshot = []; // boolean[] snapshot of items[i].selected before drag\r\n let isAppendMode = false; // whether Shift/Ctrl/Cmd was held at mousedown\r\n\r\n // --- Enable/disable state ---\r\n const MOBILE_BREAKPOINT = 768; // px – at or below this width, drag-select is disabled\r\n let listenerAttached = false; // tracks whether the container mousedown listener is active\r\n\r\n // --- Auto-scroll state ---\r\n const EDGE_THRESHOLD = 50; // px from viewport edge to trigger auto-scroll\r\n const SCROLL_SPEED = 10; // px per frame to scroll\r\n let autoScrollTimer = null; // requestAnimationFrame ID for auto-scroll\r\n\r\n // --- Text selection prevention state ---\r\n let savedUserSelect = ''; // saved document.body.style.userSelect before drag\r\n\r\n // ------------------------------------------------------------------\r\n // Mode resolution helper\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Returns the configuration for the current viewMode.\r\n * @returns {{ containerRef: import('vue').Ref, itemSelector: string } | undefined}\r\n */\r\n function getActiveConfig() {\r\n const mode = toValue(viewMode);\r\n return modes[mode] || undefined;\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Enable / disable helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Determine whether drag-select should be enabled.\r\n * Returns true when viewMode is 'card' or 'list' AND window width > 768px.\r\n */\r\n function shouldEnable() {\r\n const mode = toValue(viewMode);\r\n return (mode === 'card' || mode === 'list') && window.innerWidth > MOBILE_BREAKPOINT;\r\n }\r\n\r\n /**\r\n * Conditionally attach or detach the container listener based on shouldEnable().\r\n * Also cancels any active drag when detaching.\r\n */\r\n function syncListenerState() {\r\n if (shouldEnable()) {\r\n if (!listenerAttached) {\r\n attachContainerListener();\r\n }\r\n } else {\r\n if (listenerAttached) {\r\n cancelDrag();\r\n detachContainerListener();\r\n }\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * 判断 mousedown 目标是否为可启动框选的空白区域。\r\n * 必须在主内容区域内,且不在卡片、交互元素上。\r\n */\r\n function isBlankArea(event) {\r\n const target = event.target;\r\n // 必须在主内容区域(el-main)内\r\n const mainArea = target.closest(mainSelector);\r\n if (!mainArea) return false;\r\n // 排除当前模式的可选元素\r\n const config = getActiveConfig();\r\n if (config) {\r\n const itemEl = target.closest(config.itemSelector);\r\n if (itemEl) {\r\n const container = toValue(config.containerRef);\r\n if (container && container.contains(itemEl)) {\r\n return false;\r\n }\r\n }\r\n }\r\n // 排除交互元素(按钮、输入框、链接、下拉菜单、分页等)\r\n const interactive = target.closest('button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container');\r\n if (interactive) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Determine whether a modifier key for append-select is pressed.\r\n */\r\n function hasAppendModifier(event) {\r\n return event.shiftKey || event.ctrlKey || event.metaKey;\r\n }\r\n\r\n /**\r\n * Save a snapshot of the current selected state for all items.\r\n */\r\n function saveSnapshot() {\r\n const currentItems = toValue(items);\r\n preSelectSnapshot = currentItems.map((item) => !!item.selected);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Auto-scroll helpers\r\n // ------------------------------------------------------------------\r\n\r\n /** The last known clientY during a drag – updated by onMouseMove. */\r\n let lastClientY = 0;\r\n\r\n /**\r\n * Start the auto-scroll loop. On each animation frame we check whether the\r\n * mouse is within EDGE_THRESHOLD of the top or bottom of the viewport and\r\n * scroll accordingly. The selection rectangle and card hit-testing are also\r\n * updated after each scroll step so the visual feedback stays in sync.\r\n */\r\n function startAutoScroll() {\r\n if (autoScrollTimer !== null) return; // already running\r\n\r\n function scrollStep() {\r\n const viewportHeight = window.innerHeight;\r\n let scrollDelta = 0;\r\n\r\n if (lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n // Near bottom edge → scroll down\r\n scrollDelta = SCROLL_SPEED;\r\n } else if (lastClientY <= EDGE_THRESHOLD) {\r\n // Near top edge → scroll up\r\n scrollDelta = -SCROLL_SPEED;\r\n }\r\n\r\n if (scrollDelta !== 0) {\r\n window.scrollBy(0, scrollDelta);\r\n\r\n // After scrolling, the viewport-relative positions of cards change,\r\n // but the mouse hasn't moved. We need to adjust the start point so\r\n // the selection rectangle accounts for the scroll offset, then\r\n // re-run hit-testing.\r\n if (startPoint) {\r\n startPoint.y -= scrollDelta;\r\n selectionRect.value = calcSelectionRect(startPoint, { x: selectionRect.value.right >= startPoint.x ? selectionRect.value.right : selectionRect.value.left, y: lastClientY });\r\n updateSelection();\r\n }\r\n }\r\n\r\n // Continue the loop\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n /**\r\n * Stop the auto-scroll loop and clean up the timer.\r\n */\r\n function stopAutoScroll() {\r\n if (autoScrollTimer !== null) {\r\n cancelAnimationFrame(autoScrollTimer);\r\n autoScrollTimer = null;\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Text selection prevention helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Disable text selection on the document body during drag.\r\n */\r\n function disableTextSelection() {\r\n savedUserSelect = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n }\r\n\r\n /**\r\n * Restore the original text selection behavior on the document body.\r\n */\r\n function restoreTextSelection() {\r\n document.body.style.userSelect = savedUserSelect;\r\n }\r\n\r\n /**\r\n * Update the selected state of every item based on the current selection rectangle.\r\n */\r\n function updateSelection() {\r\n const config = getActiveConfig();\r\n if (!config) return;\r\n\r\n const container = toValue(config.containerRef);\r\n if (!container) return;\r\n\r\n const currentItems = toValue(items);\r\n const rect = selectionRect.value;\r\n\r\n // Build the selection rect in {left, top, right, bottom} format for intersection test\r\n const selRect = {\r\n left: rect.left,\r\n top: rect.top,\r\n right: rect.right,\r\n bottom: rect.bottom,\r\n };\r\n\r\n // Query all item DOM elements inside the container using the active mode's selector\r\n const itemElements = container.querySelectorAll(config.itemSelector);\r\n\r\n // Iterate over items and corresponding DOM elements\r\n currentItems.forEach((item, index) => {\r\n const itemEl = itemElements[index];\r\n if (!itemEl) return;\r\n\r\n const itemRect = itemEl.getBoundingClientRect();\r\n const itemBounds = {\r\n left: itemRect.left,\r\n top: itemRect.top,\r\n right: itemRect.right,\r\n bottom: itemRect.bottom,\r\n };\r\n\r\n const intersects = rectIntersects(selRect, itemBounds);\r\n\r\n if (isAppendMode) {\r\n // Append mode: keep original state, toggle on if intersects\r\n // If originally selected, stay selected regardless\r\n // If not originally selected, select if intersects\r\n if (preSelectSnapshot[index]) {\r\n item.selected = true;\r\n } else {\r\n item.selected = intersects;\r\n }\r\n } else {\r\n // Non-append mode: selected = intersects only\r\n item.selected = intersects;\r\n }\r\n });\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Mouse event handlers\r\n // ------------------------------------------------------------------\r\n\r\n function onMouseDown(event) {\r\n // 仅响应鼠标左键\r\n if (event.button !== 0) return;\r\n\r\n // 点击在卡片上时不启动框选\r\n if (!isBlankArea(event)) return;\r\n\r\n // Record start point (viewport coordinates)\r\n startPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Determine append mode from modifier keys at the moment of mousedown\r\n isAppendMode = hasAppendModifier(event);\r\n\r\n // 保存选中状态快照\r\n saveSnapshot();\r\n\r\n // 非追加模式下先清除所有选中\r\n if (!isAppendMode) {\r\n const currentItems = toValue(items);\r\n currentItems.forEach((item) => {\r\n item.selected = false;\r\n });\r\n }\r\n\r\n // Start dragging\r\n isDragging.value = true;\r\n selectionRect.value = calcSelectionRect(startPoint, startPoint);\r\n\r\n // 防止文本选中\r\n disableTextSelection();\r\n\r\n // Attach document-level listeners for move and up\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(event) {\r\n if (!isDragging.value || !startPoint) return;\r\n\r\n const currentPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Track last clientY for auto-scroll\r\n lastClientY = event.clientY;\r\n\r\n // Update selection rectangle\r\n selectionRect.value = calcSelectionRect(startPoint, currentPoint);\r\n\r\n // Update card selection based on intersection\r\n updateSelection();\r\n\r\n // Start or continue auto-scroll if near viewport edges\r\n const viewportHeight = window.innerHeight;\r\n if (lastClientY <= EDGE_THRESHOLD || lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n startAutoScroll();\r\n } else {\r\n stopAutoScroll();\r\n }\r\n }\r\n\r\n function onMouseUp(_event) {\r\n if (!isDragging.value) return;\r\n\r\n // 停止自动滚动\r\n stopAutoScroll();\r\n\r\n // 恢复文本选中\r\n restoreTextSelection();\r\n\r\n // End dragging\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n\r\n // Clean up document-level listeners\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Lifecycle: attach / detach container listener\r\n // ------------------------------------------------------------------\r\n\r\n function attachContainerListener() {\r\n if (!listenerAttached) {\r\n document.addEventListener('mousedown', onMouseDown);\r\n listenerAttached = true;\r\n }\r\n }\r\n\r\n function detachContainerListener() {\r\n if (listenerAttached) {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n listenerAttached = false;\r\n }\r\n }\r\n\r\n /**\r\n * Force-stop any in-progress drag (e.g. when viewMode changes).\r\n */\r\n function cancelDrag() {\r\n if (isDragging.value) {\r\n stopAutoScroll();\r\n restoreTextSelection();\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n }\r\n\r\n // 监听 viewMode 变化,启用/禁用框选\r\n // Always cancel any in-progress drag when viewMode changes (Requirement 2.3),\r\n // then re-evaluate whether listeners should be attached for the new mode.\r\n watch(\r\n () => toValue(viewMode),\r\n () => {\r\n cancelDrag();\r\n syncListenerState();\r\n }\r\n );\r\n\r\n // --- Window resize handler ---\r\n function onWindowResize() {\r\n syncListenerState();\r\n }\r\n\r\n onMounted(() => {\r\n // 仅在满足条件时启用\r\n if (shouldEnable()) {\r\n attachContainerListener();\r\n }\r\n // Always listen for resize to dynamically enable/disable\r\n window.addEventListener('resize', onWindowResize);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n cancelDrag();\r\n restoreTextSelection();\r\n stopAutoScroll();\r\n detachContainerListener();\r\n window.removeEventListener('resize', onWindowResize);\r\n });\r\n\r\n return {\r\n isDragging,\r\n selectionRect,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport { mapGetters } from 'vuex';\nimport JSZip from 'jszip';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport TagManagementDialog from '@/components/dashboard/TagManagementDialog.vue';\nimport BatchTagDialog from '@/components/dashboard/BatchTagDialog.vue';\nimport SkeletonLoader from '@/components/dashboard/SkeletonLoader.vue';\nimport FileCard from '@/components/dashboard/FileCard.vue';\nimport FolderCard from '@/components/dashboard/FolderCard.vue';\nimport MoveFileDialog from '@/components/dashboard/MoveFileDialog.vue';\nimport FileListItem from '@/components/dashboard/FileListItem.vue';\nimport FileDetailDialog from '@/components/dashboard/FileDetailDialog.vue';\nimport BatchActionBar from '@/components/dashboard/BatchActionBar.vue';\nimport MobileActionSheet from '@/components/dashboard/MobileActionSheet.vue';\nimport MobileDirectoryDrawer from '@/components/dashboard/MobileDirectoryDrawer.vue';\nimport DashboardCheckbox from '@/components/dashboard/DashboardCheckbox.vue';\nimport FilterDropdown from '@/components/dashboard/FilterDropdown.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nimport { fileManager } from '@/utils/fileManager';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFolderPath } from '@/utils/pathValidator';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport { ref } from 'vue';\nimport { useDragSelect } from '@/utils/dashboard/useDragSelect.js';\nconst SORT_FIELDS = ['time', 'size', 'rawName', 'fileName'];\nconst SORT_ORDERS = ['asc', 'desc'];\nfunction getStoredSortValue(key, validValues, fallback) {\n try {\n const value = localStorage.getItem(key);\n return validValues.includes(value) ? value : fallback;\n } catch {\n return fallback;\n }\n}\nexport default {\n name: 'AdminDashBoard',\n mixins: [backgroundManager],\n data() {\n return {\n Number: 0,\n directFileCount: 0,\n // 当前目录直接子文件数量\n directFolderCount: 0,\n // 当前目录直接子文件夹数量\n showLogoutButton: false,\n tableData: [],\n tempSearch: '',\n search: '',\n searchKeywords: '',\n // Keywords only (without tag filters) for backend search\n searchIncludeTags: '',\n // 包含的标签,逗号分隔\n searchExcludeTags: '',\n // 排除的标签,逗号分隔\n isSearchMode: false,\n currentPage: 1,\n pageSize: 15,\n selectedFiles: [],\n sortField: getStoredSortValue('sortField', SORT_FIELDS, 'time'),\n sortOrder: getStoredSortValue('sortOrder', SORT_ORDERS, 'desc'),\n isUploading: false,\n showdetailDialog: false,\n detailFile: null,\n activeUrlTab: 'originUrl',\n defaultUrlFormat: 'originUrl',\n showUrlDialog: false,\n useCustomUrl: 'false',\n // 是否启用自定义链接\n customUrlPrefix: '',\n // 自定义链接前缀\n loading: false,\n // 加载状态\n currentPath: '',\n // 当前文件夹路径\n refreshLoading: false,\n showTagDialog: false,\n // 标签管理对话框\n showBatchTagDialog: false,\n // 批量标签管理对话框\n currentTagFile: '',\n // 当前标签管理的文件\n viewMode: 'card',\n // 视图模式:card 或 list\n showMobileActionModal: false,\n // 移动端操作模态框\n mobileActionFile: null,\n // 当前移动端操作的文件\n mobileActionIndex: -1,\n // 当前移动端操作的文件索引\n mobileActionIsFolder: false,\n // 是否为文件夹操作\n longPressTimer: null,\n // 长按计时器\n showMobileDirectoryDrawer: false,\n // 移动端目录抽屉\n jumpPage: '',\n // 跳转页码输入\n // 筛选相关状态(数组形式支持多选)\n filters: {\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'None'\n label: [],\n // 审查结果: 'normal', 'teen', 'adult'\n fileType: [],\n // 文件类型: 'image', 'video', 'audio', 'other'\n channel: [],\n // 渠道类型: 'TelegramNew', 'CloudflareR2', 'S3', 'Discord', 'HuggingFace', 'WebDAV', 'External'\n channelName: [] // 渠道名称: 动态获取\n },\n channelNameOptions: [],\n // 动态从文件列表中提取\n // 移动文件对话框相关状态\n showMoveDialog: false,\n // 移动文件对话框\n moveTargetPath: '/',\n // 移动目标路径\n moveFileKey: '',\n // 当前移动的文件key\n moveFileIndex: -1,\n // 当前移动的文件索引\n isBatchMove: false,\n // 是否为批量移动\n pageSwipeStartX: null,\n pageSwipeStartY: null,\n pageSwipeStartTime: 0\n };\n },\n components: {\n DashboardTabs,\n TagManagementDialog,\n BatchTagDialog,\n SkeletonLoader,\n FileCard,\n FolderCard,\n FileListItem,\n FileDetailDialog,\n BatchActionBar,\n MobileActionSheet,\n MobileDirectoryDrawer,\n DashboardCheckbox,\n FilterDropdown,\n MoveFileDialog,\n LanguageSwitcher\n },\n setup() {\n const cardContainerRef = ref(null);\n const listContainerRef = ref(null);\n const viewModeRef = ref('card');\n const itemsRef = ref([]);\n const {\n isDragging,\n selectionRect\n } = useDragSelect({\n modes: {\n card: {\n containerRef: cardContainerRef,\n itemSelector: '.img-card'\n },\n list: {\n containerRef: listContainerRef,\n itemSelector: '.list-item'\n }\n },\n viewMode: viewModeRef,\n items: itemsRef\n });\n return {\n cardContainerRef,\n listContainerRef,\n viewModeRef,\n itemsRef,\n isDragging,\n selectionRect\n };\n },\n computed: {\n ...mapGetters(['adminUrlSettings', 'userConfig']),\n filteredTableData() {\n return this.tableData;\n },\n totalPages() {\n return Math.ceil(this.filteredTableData.length / this.pageSize) || 1;\n },\n // 基于当前文件夹直接子文件和子文件夹数量计算的真实总页数\n realTotalPages() {\n const total = this.directFolderCount + this.directFileCount;\n return Math.ceil(total / this.pageSize) || 1;\n },\n // 计算当前激活的筛选条件数量(数组形式)\n activeFilterCount() {\n return Object.values(this.filters).reduce((count, arr) => count + (Array.isArray(arr) ? arr.length : 0), 0);\n },\n // 判断是否处于搜索或筛选模式\n hasSearchOrFilter() {\n return this.isSearchMode || this.activeFilterCount > 0;\n },\n paginatedTableData() {\n const sortedData = this.sortData(this.filteredTableData);\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n let data = sortedData.slice(start, end);\n // 增加previewSrcList属性,用于预览图片\n const fullList = data.filter(file => this.isImage(file)).map(file => this.getFileLink(file.name));\n data.forEach(file => {\n if (this.isImage(file)) {\n // 重新排序,索引大于等于当前索引的元素在前,否则在后\n file.previewSrcList = fullList.slice(fullList.indexOf(this.getFileLink(file.name))).concat(fullList.slice(0, fullList.indexOf(this.getFileLink(file.name))));\n }\n });\n // 增加channelTag属性,用于显示渠道信息\n data.forEach(file => {\n if (file.metadata?.Channel === 'TelegramNew' || file.metadata?.Channel === 'Telegram') {\n file.channelTag = 'TG';\n } else if (file.metadata?.Channel === 'CloudflareR2') {\n file.channelTag = 'R2';\n } else if (file.metadata?.Channel === 'S3') {\n file.channelTag = 'S3';\n } else if (file.metadata?.Channel === 'Discord') {\n file.channelTag = 'DC';\n } else if (file.metadata?.Channel === 'HuggingFace') {\n file.channelTag = 'HF';\n } else if (file.metadata?.Channel === 'WebDAV') {\n file.channelTag = 'WD';\n } else if (file.metadata?.Channel === 'External') {\n file.channelTag = this.$t('dashboard.externalTag');\n } else {\n file.channelTag = this.$t('dashboard.unknownTag');\n }\n });\n return data;\n },\n sortLabel() {\n const labelKeys = {\n time: 'dashboard.sortByTime',\n size: 'dashboard.sortBySize',\n rawName: 'dashboard.sortByRawName',\n fileName: 'dashboard.sortByFileName'\n };\n const fieldLabel = this.$t(labelKeys[this.sortField] || labelKeys.time);\n const orderLabel = this.$t(this.sortOrder === 'desc' ? 'dashboard.sortDesc' : 'dashboard.sortAsc');\n return `${fieldLabel} · ${orderLabel}`;\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n detailDialogWidth() {\n return window.innerWidth > 768 ? '70%' : '90%';\n },\n accessType() {\n if (this.detailFile?.metadata?.ListType === 'White') {\n return this.$t('filter.normal');\n } else if (this.detailFile?.metadata?.ListType === 'Block' || this.detailFile?.metadata?.Label === 'adult') {\n return this.$t('filter.blocked');\n } else {\n return this.$t('filter.normal');\n }\n },\n allUrl() {\n // 外链图片均采用外链\n if (this.detailFile?.metadata?.Channel === 'External') {\n return {\n 'originUrl': `${this.detailFile?.metadata?.ExternalLink}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n } else {\n return {\n 'originUrl': `${this.rootUrl}${this.detailFile?.name}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.rootUrl}${this.detailFile?.name}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n }\n },\n tableColumnNum() {\n return window.innerWidth > 768 ? 3 : 1;\n },\n tablePreviewSpan() {\n return window.innerWidth > 768 ? 2 : 1;\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n selectPage() {\n // 如果当前页所有文件都被选中,则返回 true,否则返回 false\n return this.paginatedTableData.every(file => file.selected);\n },\n selectedPageFiles() {\n // 如果当前页有文件被选中,则返回 true,否则返回 false\n return this.paginatedTableData.some(file => file.selected);\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.userConfig?.urlPrefix || `${document.location.origin}/file/`;\n },\n isSelectAll: {\n get() {\n return this.paginatedTableData.length > 0 && this.paginatedTableData.every(file => file.selected);\n },\n set(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n }\n },\n isIndeterminate() {\n const selectedCount = this.paginatedTableData.filter(file => file.selected).length;\n return selectedCount > 0 && selectedCount < this.paginatedTableData.length;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 5 : 7;\n }\n },\n watch: {\n // Sync viewMode data property to the ref used by useDragSelect\n viewMode: {\n handler(newVal) {\n this.viewModeRef = newVal;\n },\n immediate: true\n },\n // Sync paginatedTableData computed property to the ref used by useDragSelect\n paginatedTableData: {\n handler(newVal) {\n this.itemsRef = newVal;\n },\n immediate: true\n },\n tableData: {\n handler(newData) {\n // selectedFiles 增加 newData中新选中,不包含在 selectedFiles 中的文件\n this.selectedFiles = this.selectedFiles.concat(newData.filter(file => file.selected && !this.selectedFiles.includes(file)));\n // selectedFiles 删掉 newData 中已取消选中的文件\n this.selectedFiles = this.selectedFiles.filter(file => file.selected);\n // selectedFiles 删掉 tableData 中已删除的文件\n this.selectedFiles = this.selectedFiles.filter(file => newData.includes(file));\n },\n deep: true\n },\n defaultUrlFormat(newFormat) {\n localStorage.setItem('defaultUrlFormat', newFormat);\n },\n showdetailDialog(newVal) {\n if (newVal) {\n this.activeUrlTab = this.defaultUrlFormat || 'originUrl';\n }\n },\n customUrlPrefix(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n currentPath(val) {\n // 页面切换时,取消选择的内容\n this.tableData.forEach(file => file.selected = false);\n }\n },\n methods: {\n // 切换视图模式\n setViewMode(mode) {\n if (this.viewMode === mode) {\n return;\n }\n this.viewMode = mode;\n localStorage.setItem('viewMode', this.viewMode);\n },\n // 列表视图全选当前页\n handleSelectAllPage(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n },\n // 移动端长按开始\n handleTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = false;\n this.showMobileActionModal = true;\n }, 500); // 500ms 长按触发\n },\n // 移动端长按结束/取消\n handleTouchEnd() {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n },\n // 文件夹长按开始\n handleFolderTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = true;\n this.showMobileActionModal = true;\n }, 500);\n },\n // 处理移动端操作\n handleMobileAction(action) {\n const file = this.mobileActionFile;\n const index = this.mobileActionIndex;\n this.showMobileActionModal = false;\n if (!file) return;\n switch (action) {\n case 'detail':\n this.openDetailDialog(index, file.name);\n break;\n case 'copy':\n this.handleCopy(index, file.name);\n break;\n case 'folderCopy':\n this.handleFolderCopy(file.name);\n break;\n case 'download':\n this.handleDownload(file.name);\n break;\n case 'move':\n this.handleMove(index, file.name);\n break;\n case 'delete':\n this.handleDelete(index, file.name);\n break;\n case 'tag':\n this.handleTagManagement(file.name);\n break;\n }\n },\n // 返回上一级目录\n handleGoBack() {\n const pathParts = this.currentPath.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n pathParts.pop();\n const parentPath = pathParts.join('/');\n this.navigateToFolder(parentPath);\n }\n this.showMobileDirectoryDrawer = false;\n },\n // 获取标签颜色\n getTagColor(index) {\n const colors = ['linear-gradient(135deg, #667eea 0%, #764ba2 100%)', 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)', 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'];\n return colors[index % colors.length];\n },\n // 视频hover播放控制\n handleVideoHover(event, isEnter) {\n const video = event.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n },\n // 格式化文件大小\n formatFileSize(bytes) {\n if (!bytes || bytes === 0) return '-';\n bytes = Number(bytes);\n if (isNaN(bytes)) return '-';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (bytes >= 1024 && i < units.length - 1) {\n bytes /= 1024;\n i++;\n }\n return bytes.toFixed(i > 0 ? 1 : 0) + ' ' + units[i];\n },\n handleSearch() {\n this.search = this.tempSearch;\n this.isSearchMode = this.search.trim() !== '';\n this.currentPage = 1; // 重置到第一页\n\n // 解析搜索字符串,提取标签和关键字\n // 支持 #tag 表示包含标签,-#tag 表示排除标签\n if (this.search && this.search.trim()) {\n const includeTags = [];\n const excludeTags = [];\n\n // 匹配 -#tag 和 #tag\n let searchText = this.search;\n\n // 先匹配排除标签 -#tag\n const excludeTagRegex = /-#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(excludeTagRegex, (match, tag) => {\n excludeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 再匹配包含标签 #tag\n const includeTagRegex = /#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(includeTagRegex, (match, tag) => {\n includeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 清理剩余的关键字(去除多余空格)\n this.searchKeywords = searchText.replace(/\\s+/g, ' ').trim();\n\n // 构建标签查询字符串\n this.searchIncludeTags = includeTags.join(',');\n this.searchExcludeTags = excludeTags.join(',');\n console.log('Search keywords:', this.searchKeywords);\n console.log('Include tags:', this.searchIncludeTags);\n console.log('Exclude tags:', this.searchExcludeTags);\n } else {\n this.searchKeywords = '';\n this.searchIncludeTags = '';\n this.searchExcludeTags = '';\n }\n this.refreshFileList();\n },\n // 处理筛选变化(来自 FilterDropdown 组件)\n handleFilterChange({\n type,\n filters\n }) {\n this.filters = filters;\n this.currentPage = 1; // 重置到第一页\n this.refreshFileList();\n },\n // 清除所有筛选条件\n clearFilters() {\n this.filters = {\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.currentPage = 1;\n this.refreshFileList();\n },\n // 从 API 获取所有渠道名称\n async extractChannelNames() {\n try {\n const response = await fetchWithAuth('/api/channels?includeDisabled=true', {\n method: 'GET'\n });\n if (response.ok) {\n const channels = await response.json();\n const channelOptions = [];\n\n // 类型映射(显示名称)\n const typeLabels = {\n telegram: 'Telegram',\n cfr2: 'Cloudflare R2',\n s3: 'S3',\n discord: 'Discord',\n huggingface: 'HuggingFace',\n webdav: 'WebDAV'\n };\n\n // 按类型提取渠道名称,channel.type是类型内部存储名称(可能根据版本有变化),type是类型对外名称\n Object.entries(channels).forEach(([type, channelList]) => {\n if (Array.isArray(channelList) && channelList.length > 0) {\n channelList.forEach(channel => {\n if (channel.name) {\n channelOptions.push({\n name: channel.name,\n type: channel.type,\n typeLabel: typeLabels[type] || type,\n // 使用 channel.type:channel.name 作为唯一标识\n value: `${channel.type}:${channel.name}`\n });\n }\n });\n }\n });\n\n // 按类型和名称排序\n channelOptions.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type.localeCompare(b.type);\n }\n return a.name.localeCompare(b.name);\n });\n this.channelNameOptions = channelOptions;\n }\n } catch (error) {\n console.error('Failed to fetch channel names:', error);\n }\n },\n handleDownload(key) {\n const link = document.createElement('a');\n link.href = this.getFileLink(key);\n link.download = key;\n link.click();\n },\n openDetailDialog(index, key) {\n this.detailFile = this.paginatedTableData[index];\n this.showdetailDialog = true;\n },\n handleTabClick(tab) {\n this.activeUrlTab = tab.props.name;\n },\n handleUrlClick(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('dashboard.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('dashboard.copyFailed')\n });\n });\n },\n handleDetailDelete(key) {\n this.$confirm(this.$t('dashboard.deleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n this.showdetailDialog = false;\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBlock(key) {\n this.$confirm(this.$t('dashboard.blockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/block/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.blockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.blockFailed')));\n }).catch(() => console.log('Block cancelled'));\n },\n handleWhite(key) {\n this.$confirm(this.$t('dashboard.whiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/white/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.whiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.whiteFailed')));\n }).catch(() => console.log('White cancelled'));\n },\n handleDelete(index, key) {\n // 判断是否为文件夹\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n this.$confirm(isFolder ? this.$t('dashboard.deleteFolderConfirm') : this.$t('dashboard.deleteFileConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}?folder=${isFolder}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n fileManager.removeFile(key);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBatchDelete() {\n this.$confirm(this.$t('dashboard.batchDeleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/delete/${file.name}?folder=${isFolder}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n fileManager.removeFile(this.selectedFiles[index].name);\n }\n });\n this.selectedFiles = [];\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.batchDeleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchDeleteFailed')));\n }).catch(() => console.log('Batch delete cancelled'));\n },\n async handleBatchCopy() {\n // 分离文件和文件夹\n const files = this.selectedFiles.filter(item => !item.isFolder);\n const folders = this.selectedFiles.filter(item => item.isFolder);\n\n // 如果有文件夹,显示加载状态\n let loading = null;\n if (folders.length > 0) {\n loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n }\n try {\n // 收集所有文件(包括文件夹内的文件)\n let allFiles = [...files];\n\n // 递归获取所有文件夹内的文件\n for (const folder of folders) {\n try {\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folder.name)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n if (data.files && data.files.length > 0) {\n allFiles = allFiles.concat(data.files);\n }\n } catch (error) {\n console.error(`获取文件夹 ${folder.name} 内容失败:`, error);\n }\n }\n if (loading) loading.close();\n if (allFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 生成所有链接\n const links = allFiles.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.batchCopySuccess', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n }\n } catch (error) {\n if (loading) loading.close();\n console.error('Batch copy failed:', error);\n this.$message.error(this.$t('dashboard.batchCopyFailed'));\n }\n },\n copyToClipboardFallback(text) {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.style.position = 'fixed';\n textarea.style.clip = 'rect(0 0 0 0)';\n textarea.style.top = '10px';\n textarea.value = text;\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n this.$message.success(this.$t('dashboard.batchCopyLinksSuccess'));\n },\n handleCopy(index, key) {\n let text = '';\n if (this.paginatedTableData[index].metadata?.Channel === 'External') {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = this.paginatedTableData[index].metadata?.ExternalLink;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.paginatedTableData[index].metadata?.ExternalLink})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.paginatedTableData[index].metadata?.ExternalLink}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n } else {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = `${this.rootUrl}${key}`;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.rootUrl}${key})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.rootUrl}${key}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n }\n navigator.clipboard ? navigator.clipboard.writeText(text).then(() => this.$message.success(this.$t('dashboard.copyFileLinkSuccess'))) : this.copyToClipboardFallback(text);\n },\n async loadMoreData() {\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, 60, this.filters);\n // 获取新的文件列表后\n await this.fetchFileList();\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadMoreFailed'));\n } finally {\n this.loading = false;\n }\n },\n updateStats(num, init = false) {\n if (init) {\n this.Number = num;\n } else {\n this.Number += num;\n }\n },\n setSortField(field) {\n if (!SORT_FIELDS.includes(field)) return;\n this.sortField = field;\n this.currentPage = 1;\n localStorage.setItem('sortField', field);\n },\n setSortOrder(order) {\n if (!SORT_ORDERS.includes(order)) return;\n this.sortOrder = order;\n this.currentPage = 1;\n localStorage.setItem('sortOrder', order);\n },\n sortData(data) {\n if (!Array.isArray(data)) return [];\n const folders = data.filter(file => file.isFolder);\n const files = data.filter(file => !file.isFolder);\n const getSizeInBytes = item => {\n const parseSize = value => {\n if (value === null || value === undefined || value === '') return null;\n const parsedValue = Number(value);\n return Number.isFinite(parsedValue) ? parsedValue : null;\n };\n const sizeInBytes = parseSize(item.metadata?.FileSizeBytes);\n if (sizeInBytes !== null) return sizeInBytes;\n const sizeInMegabytes = parseSize(item.metadata?.FileSize);\n if (sizeInMegabytes !== null) return sizeInMegabytes * 1024 * 1024;\n return parseSize(item.size) ?? 0;\n };\n const getValue = item => {\n switch (this.sortField) {\n case 'size':\n return getSizeInBytes(item);\n case 'rawName':\n return item.metadata?.RawName || item.name || '';\n case 'fileName':\n return item.metadata?.FileName || item.name || '';\n case 'time':\n default:\n return item.metadata?.TimeStamp ? new Date(item.metadata.TimeStamp).getTime() : 0;\n }\n };\n const compare = (a, b) => {\n const valA = getValue(a);\n const valB = getValue(b);\n let result = 0;\n if (typeof valA === 'string' || typeof valB === 'string') {\n result = String(valA || '').localeCompare(String(valB || ''));\n } else {\n result = valA - valB;\n }\n return this.sortOrder === 'desc' ? -result : result;\n };\n folders.sort(compare);\n files.sort(compare);\n return folders.concat(files);\n },\n handleVideoClick(event) {\n const videoElement = event.target;\n if (videoElement.requestFullscreen) {\n videoElement.requestFullscreen();\n } else if (videoElement.webkitRequestFullscreen) {\n // Safari/Old Chrome\n videoElement.webkitRequestFullscreen();\n } else if (videoElement.mozRequestFullScreen) {\n // Firefox\n videoElement.mozRequestFullScreen();\n } else if (videoElement.msRequestFullscreen) {\n // IE/Edge\n videoElement.msRequestFullscreen();\n }\n },\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n handleSelectPage() {\n if (this.selectPage) {\n this.paginatedTableData.forEach(file => file.selected = false);\n } else {\n this.paginatedTableData.forEach(file => file.selected = true);\n }\n },\n clearSelection() {\n this.tableData.forEach(file => file.selected = false);\n this.selectedFiles = [];\n },\n handleBatchAction(command) {\n if (command === 'copy') {\n this.handleBatchCopy();\n } else if (command === 'delete') {\n this.handleBatchDelete();\n } else if (command === 'download') {\n this.handleBatchDownload();\n } else if (command === 'move') {\n this.handleBatchMove();\n } else if (command === 'tagManagement') {\n this.handleBatchTagManagement();\n } else if (command === 'ban') {\n this.handleBatchBlock();\n } else if (command === 'white') {\n this.handleBatchWhite();\n }\n },\n handleMove(index, key) {\n // 打开自定义移动对话框\n this.moveFileKey = key;\n this.moveFileIndex = index;\n this.isBatchMove = false;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n handleBatchMove() {\n // 打开自定义移动对话框(批量模式)\n this.isBatchMove = true;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n // 确认移动操作\n confirmMove(targetPath) {\n const value = targetPath;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return;\n }\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning(this.$t('dashboard.moveTargetSameAsCurrent'));\n return;\n }\n\n // 关闭对话框\n this.showMoveDialog = false;\n if (this.isBatchMove) {\n // 批量移动\n this.executeBatchMove(newPath);\n } else {\n // 单个文件移动\n this.executeSingleMove(newPath);\n }\n },\n // 执行单个文件移动\n executeSingleMove(newPath) {\n const key = this.moveFileKey;\n const isFolder = this.tableData.find(file => file.name === key)?.isFolder;\n fetchWithAuth(`/api/manage/move/${key}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + key.split('/').pop();\n fileManager.moveFile(key, newKey, isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n }\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n // 执行批量移动\n executeBatchMove(newPath) {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/move/${file.name}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const file = this.selectedFiles[index];\n file.selected = false;\n const fileIndex = this.tableData.findIndex(f => f.name === file.name);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + file.name.split('/').pop();\n fileManager.moveFile(file.name, newKey, file.isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n }\n }\n });\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n handleBatchBlock() {\n this.$confirm(this.$t('dashboard.batchBlockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/block/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchBlockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchBlockFailed')));\n }).catch(() => console.log('Batch block cancelled'));\n },\n handleBatchWhite() {\n this.$confirm(this.$t('dashboard.batchWhiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/white/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchWhiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchWhiteFailed')));\n }).catch(() => console.log('Batch white cancelled'));\n },\n handleBatchDownload() {\n // 将选中文件打包成 zip 文件下载\n const zip = new JSZip();\n const folder = zip.folder('files');\n // 构造Promise数组,等待所有文件下载完成后再打包\n const fileNameCount = {}; // 用于跟踪文件名出现的次数\n\n const downloadPromises = this.selectedFiles.map(async file => {\n // 跳过文件夹\n if (file.isFolder) {\n return;\n }\n const response = await fetch(this.getFileLink(file.name));\n const blob = await response.blob();\n // 检查文件名是否已经存在\n let fileName = file.metadata?.FileName || file.name;\n if (fileNameCount[fileName]) {\n // 如果已经存在,则在文件名后加上编号\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n const baseName = fileName.substring(0, fileName.lastIndexOf('.'));\n fileName = `${baseName}(${fileNameCount[fileName]})${extension}`;\n fileNameCount[file.name]++;\n } else {\n // 如果不存在,则初始化为1\n fileNameCount[fileName] = 1;\n }\n // 将文件添加到 zip 文件夹中\n folder.file(fileName, blob);\n });\n Promise.all(downloadPromises).then(() => zip.generateAsync({\n type: 'blob'\n })).then(blob => {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = 'files.zip';\n link.click();\n });\n },\n isVideo(file) {\n // 排除音频文件\n if (this.isAudio(file)) return false;\n let flag = file.metadata?.FileType?.includes('video');\n // 用文件名后缀判断是否为视频文件\n if (!flag) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'rmvb', '3gp', 'mpg', 'mpeg', 'm4v', 'f4v', 'rm', 'asf', 'dat', 'ts', 'vob', 'swf', 'divx', 'xvid', 'm2ts', 'mts', 'm2v', '3g2', '3gp2', '3gpp', '3gpp2', 'mpe', 'm1v', 'mpv', 'mpv2', 'mp2v', 'm2t', 'm2ts', 'm2v', 'm4v'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = videoExtensions.includes(extension);\n }\n return flag;\n },\n isAudio(file) {\n let flag = file.metadata?.FileType?.includes('audio');\n // 用文件名后缀判断是否为音频文件\n if (!flag) {\n const audioExtensions = ['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma', 'm4a', 'ape', 'aiff', 'alac', 'opus', 'mid', 'midi', 'm4b', 'm4p', 'm4r', 'amr', 'au', 'ra', 'ram'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = audioExtensions.includes(extension);\n }\n return flag;\n },\n isImage(file) {\n let flag = file.metadata?.FileType?.includes('image');\n // 用文件名后缀判断是否为图片文件\n if (!flag) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'psd', 'ai', 'eps', 'raw', 'cr2', 'nef', 'orf', 'sr2', 'dng', 'arw', 'rw2', 'raf', 'pef', 'x3f', 'srf', 'erf', 'mrw', 'nrw', 'kdc', 'dcr', 'mef', 'mos', 'crw', 'raf', 'rwl', 'srw', '3fr', 'fff', 'iiq', 'qtk', 'bay', 'k25', 'kdc', 'dcs', 'drf', 'dng', 'erf', 'kdc', 'mdc', 'mef', 'mos', 'mrw', 'nef', 'nrw', 'orf', 'pef', 'ptx', 'pxn', 'r3d', 'raf', 'raw', 'rwl', 'rw2', 'rwz', 'sr2', 'srf', 'x3f'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = imageExtensions.includes(extension);\n }\n return flag;\n },\n getFileLink(filename) {\n const fileLink = process.env.NODE_ENV === 'production' ? `/file/${filename}?from=admin` : `/api/file/${filename}?from=admin`;\n return fileLink;\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (this.currentPage === Math.ceil(this.tableData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n isMobileViewport() {\n return window.innerWidth < 768;\n },\n updateResponsivePageSize() {\n const nextPageSize = this.isMobileViewport() ? 16 : 15;\n if (this.pageSize === nextPageSize) return;\n const firstVisibleIndex = (this.currentPage - 1) * this.pageSize;\n this.pageSize = nextPageSize;\n this.currentPage = Math.min(Math.floor(firstVisibleIndex / nextPageSize) + 1, this.realTotalPages);\n },\n isSwipeIgnoredTarget(target) {\n return Boolean(target?.closest?.('button, a, input, textarea, select, .el-checkbox, .action-btn, .list-action-btn'));\n },\n handlePageSwipeStart(event) {\n if (!this.isMobileViewport() || this.isDragging || this.loading || this.showMobileActionModal || this.showMobileDirectoryDrawer || this.isSwipeIgnoredTarget(event.target)) {\n this.resetPageSwipe();\n return;\n }\n const touch = event.touches?.[0];\n if (!touch) return;\n this.pageSwipeStartX = touch.clientX;\n this.pageSwipeStartY = touch.clientY;\n this.pageSwipeStartTime = Date.now();\n },\n async handlePageSwipeEnd(event) {\n if (this.pageSwipeStartX === null || this.pageSwipeStartY === null) return;\n const touch = event.changedTouches?.[0];\n if (!touch) {\n this.resetPageSwipe();\n return;\n }\n const deltaX = touch.clientX - this.pageSwipeStartX;\n const deltaY = touch.clientY - this.pageSwipeStartY;\n const elapsed = Date.now() - this.pageSwipeStartTime;\n this.resetPageSwipe();\n if (elapsed > 700 || Math.abs(deltaX) < 64 || Math.abs(deltaX) < Math.abs(deltaY) * 1.35) {\n return;\n }\n const targetPage = deltaX < 0 ? this.currentPage + 1 : this.currentPage - 1;\n await this.goToSwipePage(targetPage);\n },\n resetPageSwipe() {\n this.pageSwipeStartX = null;\n this.pageSwipeStartY = null;\n this.pageSwipeStartTime = 0;\n },\n async goToSwipePage(page) {\n if (page < 1 || page > this.realTotalPages || page === this.currentPage) return;\n if (page > this.totalPages) {\n await this.loadMoreDataUntilPage(page);\n return;\n }\n this.handlePageChange(page);\n },\n // 跳转到指定页码\n handleJumpPage() {\n const page = parseInt(this.jumpPage);\n if (isNaN(page) || page < 1) {\n this.$message.warning(this.$t('dashboard.invalidPageNumber'));\n return;\n }\n if (page > this.realTotalPages) {\n this.$message.warning(this.$t('dashboard.pageExceedsMax', {\n max: this.realTotalPages\n }));\n return;\n }\n // 如果目标页超过当前已加载的页数,需要先加载更多数据\n if (page > this.totalPages) {\n this.$message.info(this.$t('dashboard.loadingData'));\n this.loadMoreDataUntilPage(page);\n } else {\n this.currentPage = page;\n }\n this.jumpPage = '';\n },\n // 加载数据直到指定页\n async loadMoreDataUntilPage(targetPage) {\n this.loading = true;\n try {\n // 计算目标页需要的文件数量(不包含文件夹)\n // 目标页最后一个项目的索引 = targetPage * pageSize\n // 需要的文件数 = 目标索引 - 已有文件夹数量\n const targetIndex = targetPage * this.pageSize;\n const currentFolderCount = this.filteredTableData.filter(item => item.isFolder).length;\n const currentFileCount = this.filteredTableData.filter(item => !item.isFolder).length;\n\n // 需要加载的文件数量 = 目标位置需要的文件数 - 当前已加载的文件数\n const neededFileCount = Math.max(0, targetIndex - currentFolderCount - currentFileCount);\n if (neededFileCount > 0) {\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, neededFileCount, this.filters);\n await this.fetchFileList();\n }\n this.currentPage = Math.min(targetPage, this.totalPages);\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadDataFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 判断是否为文件夹\n isFolder(item) {\n // 如果是已经标记为文件夹的项目,直接返回true\n if (item.isFolder) {\n return true;\n }\n\n // 获取真实的文件路径(去除URL前缀)\n let path = item.name;\n if (path.startsWith('http')) {\n path = path.split('/file/')[1];\n }\n\n // 如果文件名包含'/',需要判断是否是当前路径下的文件\n if (path && path.includes('/')) {\n // 获取相对于当前路径的部分\n const relativePath = this.currentPath ? path.substring(this.currentPath.length) : path;\n\n // 如果在根目录,第一个斜杠前的部分就是文件夹\n if (this.currentPath === '') {\n return !path.split('/')[0].includes('.');\n }\n\n // 如果在子文件夹中,检查相对路径是否还包含其他文件夹\n return relativePath.includes('/');\n }\n return false;\n },\n // 获取文件夹名称\n getFolderName(path) {\n let folderName = '';\n // 如果是文件夹路径,只返回最后一级文件夹名\n if (path && path.includes('/')) {\n const parts = path.split('/');\n // 如果是根目录下的文件夹\n if (this.currentPath === '') {\n folderName = parts[0];\n } else {\n // 如果是子文件夹\n const relativePath = path.substring(this.currentPath.length);\n folderName = relativePath.split('/')[0];\n }\n } else {\n folderName = path;\n }\n const maxLength = 20; // Adjust max length as needed\n if (folderName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${folderName.substring(0, startLength)}...${folderName.substring(folderName.length - endLength)}`;\n }\n return folderName;\n },\n // 获取文件名称(去除路径和URL前缀)\n getFileName(path) {\n let fileName = path.split('/').pop();\n const maxLength = 20; // Adjust max length as needed, ensure it fits in one line\n if (fileName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${fileName.substring(0, startLength)}...${fileName.substring(fileName.length - endLength)}`;\n }\n return fileName;\n },\n // 获取文件名前半部分(用于中间省略效果)\n getFileNameStart(name) {\n if (!name) return '';\n // 如果文件名较短,返回全部\n if (name.length <= 30) return name;\n // 保留开头部分(约60%的长度用于显示前半部分)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回文件名主体部分\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(baseName.length, Math.floor(name.length * 0.6));\n return baseName.substring(0, keepLength);\n }\n // 无扩展名的情况\n return name.substring(0, Math.floor(name.length * 0.6));\n },\n // 获取文件名后半部分(用于中间省略效果)\n getFileNameEnd(name) {\n if (!name) return '';\n // 如果文件名较短,返回空\n if (name.length <= 30) return '';\n // 保留末尾部分(包含扩展名)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回最后几个字符 + 扩展名\n const ext = name.substring(dotIndex);\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(8, Math.floor(baseName.length * 0.2));\n return '…' + baseName.substring(baseName.length - keepLength) + ext;\n }\n // 无扩展名的情况\n const keepLength = Math.min(10, Math.floor(name.length * 0.3));\n return '…' + name.substring(name.length - keepLength);\n },\n // 进入文件夹\n enterFolder(folderPath) {\n // 确保路径末尾有 '/'\n this.currentPath = folderPath + (folderPath.endsWith('/') ? '' : '/');\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 导航到指定文件夹\n navigateToFolder(path) {\n // 确保空路径时不添加 '/'\n this.currentPath = path ? path + (path.endsWith('/') ? '' : '/') : '';\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 获取文件列表\n async fetchFileList() {\n this.loading = true;\n try {\n // 从本地存储获取数据\n const data = fileManager.getLocalFileList();\n\n // 解析返回的数据\n const folders = new Set(data.directories || []);\n const files = data.files || [];\n\n // 处理文件夹数据\n const folderItems = Array.from(folders).map(folder => ({\n name: folder,\n isFolder: true,\n selected: false,\n metadata: {\n FileName: folder.split('/').pop()\n }\n }));\n\n // 处理文件数据\n const fileItems = files.map(file => ({\n name: file.name,\n isFolder: false,\n selected: false,\n metadata: file.metadata\n }));\n\n // 更新表格数据\n this.tableData = [...folderItems, ...fileItems];\n\n // 更新统计信息\n this.updateStats(data.totalCount, true);\n\n // 更新直接文件和文件夹数量\n this.directFileCount = data.directFileCount || 0;\n this.directFolderCount = data.directFolderCount || 0;\n } catch (error) {\n console.error('Error fetching file list:', error);\n this.$message.error(this.$t('dashboard.fetchFileListFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 刷新文件列表\n async refreshFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n const success = await fileManager.refreshFileList(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, this.filters);\n if (success) {\n await this.fetchFileList();\n } else {\n throw new Error('Refresh failed');\n }\n } catch (error) {\n // 认证失败由 fetchWithAuth 统一处理跳转,不重复提示\n if (!error.message?.includes('Unauthorized') && this.$store.state.adminLoggedIn) {\n console.error('Error refreshing file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n }\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // 刷新本地文件列表\n async refreshLocalFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n await this.fetchFileList();\n } catch (error) {\n console.error('Error refreshing local file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // Tag management methods\n handleTagManagement(fileId) {\n this.currentTagFile = fileId;\n this.showTagDialog = true;\n },\n handleBatchTagManagement() {\n if (this.selectedFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.selectFilesFirst'));\n return;\n }\n this.showBatchTagDialog = true;\n },\n async handleTagsUpdated(tags) {\n // 更新本地文件数据中的标签\n const fileIndex = this.tableData.findIndex(file => file.name === this.currentTagFile);\n if (fileIndex !== -1) {\n // 更新 tableData 中的标签\n if (!this.tableData[fileIndex].metadata) {\n this.tableData[fileIndex].metadata = {};\n }\n this.tableData[fileIndex].metadata.Tags = tags;\n\n // 如果详情对话框正在显示这个文件,也更新详情数据\n if (this.showdetailDialog && this.detailFile?.name === this.currentTagFile) {\n if (!this.detailFile.metadata) {\n this.detailFile.metadata = {};\n }\n this.detailFile.metadata.Tags = tags;\n }\n }\n },\n async handleBatchTagsUpdated() {\n // 刷新文件列表以显示更新后的标签\n await this.refreshLocalFileList();\n },\n handleMetadataUpdated(fileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === fileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 如果 detailFile 正在显示该文件,同步更新 detailFile\n if (this.detailFile && this.detailFile.name === fileId) {\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n }\n },\n handleFileRenamed(oldFileId, newFileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 name(File_ID)和 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === oldFileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].name = newFileId;\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 更新 detailFile 引用并关闭/重新打开详情弹窗以刷新链接\n if (this.detailFile && this.detailFile.name === oldFileId) {\n this.detailFile.name = newFileId;\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n // 关闭详情弹窗,然后在下一个 tick 重新打开以刷新所有链接\n this.showdetailDialog = false;\n this.$nextTick(() => {\n this.showdetailDialog = true;\n });\n }\n },\n // 生成单个文件链接\n generateFileLink(key, metadata) {\n const isExternal = metadata?.Channel === 'External';\n const baseUrl = isExternal ? metadata?.ExternalLink : `${this.rootUrl}${key}`;\n const fileName = metadata?.FileName || key;\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n return baseUrl;\n case 'mdUrl':\n return `![${fileName}](${baseUrl})`;\n case 'htmlUrl':\n return `\"${fileName}\"`;\n case 'bbUrl':\n return `[img]${baseUrl}[/img]`;\n case 'tgId':\n return metadata?.TgFileId || '';\n case 's3Location':\n return metadata?.S3Location || '';\n default:\n return baseUrl;\n }\n },\n // 复制文件夹中所有文件的链接\n async handleFolderCopy(folderName) {\n // 显示加载状态\n const loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n try {\n // 调用 list API 递归获取文件夹内所有文件\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folderName)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n loading.close();\n if (!data.files || data.files.length === 0) {\n this.$message.warning(this.$t('dashboard.folderEmptyNoLinks'));\n return;\n }\n\n // 根据当前链接格式生成所有文件链接\n const links = data.files.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n }\n } catch (error) {\n loading.close();\n console.error('Copy folder links failed:', error);\n this.$message.error(this.$t('dashboard.copyFolderLinksFailed'));\n }\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.updateResponsivePageSize();\n window.addEventListener('resize', this.updateResponsivePageSize);\n this.loading = true;\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n // 首次加载时刷新文件列表\n this.refreshFileList().then(() => {\n // 获取所有渠道名称\n return this.extractChannelNames();\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('dashboard.syncDataError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n\n // 读取自定义链接设置项\n this.customUrlPrefix = this.adminUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.adminUrlSettings.useCustomUrl;\n\n // 恢复视图模式偏好\n const savedViewMode = localStorage.getItem('viewMode');\n if (savedViewMode === 'card' || savedViewMode === 'list') {\n this.viewMode = savedViewMode;\n }\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.updateResponsivePageSize);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminDashBoard.vue?vue&type=template&id=1af8d52e&scoped=true\"\nimport script from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\nexport * from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"@/styles/admin-common.css?vue&type=style&index=1&id=1af8d52e&scoped=true&lang=css&external\"\nimport \"./AdminDashBoard.vue?vue&type=style&index=2&id=1af8d52e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1af8d52e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","width","trigger","transition","reference","onClick","$slots","undefined","default","error","icon","type","size","fetchDirectoryTree","$t","_","ref","data","treeData","props","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","name","loading","args","openDrawer","modelValue","drawerVisible","direction","title","String","source","validator","value","includes","children","label","windowWidth","window","innerWidth","computed","this","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","axios","get","withAuthCode","tree","err","console","startsWith","$emit","__exports__","e","module","exports","s","a","o","h","u","r","t","l","n","Error","code","i","call","length","d","c","p","encode","f","getTypeOf","charCodeAt","push","charAt","join","decode","substr","replace","uint8array","Uint8Array","Array","indexOf","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","fromCharCode","file","O","utf8encode","I","m","g","b","v","y","w","k","x","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","end","generatedError","lock","generateWorker","platform","forEach","options","_compressWorker","arguments","files","Object","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","from","allocBuffer","alloc","fill","isBuffer","Date","toUpperCase","parseInt","slice","substring","lastIndexOf","toString","filter","test","folder","remove","generate","generateInternalStream","mimeType","toLowerCase","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","index","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","max","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","Math","min","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","concat","apply","set","_worker","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","blob","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","floor","buffer","byteLength","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","target","result","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","abs","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","port1","onmessage","port2","postMessage","global","TypeError","state","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","constructor","catch","race","immediate","assign","chunkSize","windowBits","memLevel","strategy","to","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","attachEvent","Function","callback","clearImmediate","validateFolderPath","strict","trim","valid","i18n","dotPattern","invalidChars","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_component_el_input","_component_DirectoryTreePicker","_component_el_dialog","dialogVisible","isBatchMove","onClose","handleClose","footer","handleConfirm","targetPath","placeholder","prepend","onSelect","handleDirectorySelect","showTreePicker","treeError","handleTreeNodeClick","treeLoading","components","DirectoryTreePicker","Boolean","initialPath","emits","val","close","active","currentPath","navigate","pathParts","style","paddingLeft","goBack","isFolder","handleAction","action","_component_el_tag","_component_el_tab_pane","_component_el_alert","_component_el_tabs","dialogWidth","activeTab","count","fileCount","inputTag","onKeyup","handleAddInputTag","onInput","handleInputChange","clearable","showSuggestions","suggestions","tag","selectSuggestion","tagsToAdd","closable","removeFromToAdd","executeAddTags","disabled","commonTags","handleRemoveCommonTag","description","center","handleClearAllTags","selectedFiles","required","debounceTimer","selectedFilesOnly","fileIds","map","loadCommonTags","resetData","newTab","tagPromises","encodeURIComponent","responses","allTags","tags","every","clearTimeout","fetchSuggestions","prefix","warning","splice","headers","body","JSON","stringify","success","updated","confirm","confirmButtonText","cancelButtonText","executeClearTags","info","_component_Loading","_component_el_icon","handleAddTag","currentTags","handleRemoveTag","popularTags","handleAddPopularTag","loadingPopularTags","Loading","fileId","loadFileTags","loadPopularTags","message","_component_el_image","_component_el_descriptions_item","_component_el_descriptions","_component_el_form_item","_component_el_form","isEditing","round","startEdit","openRenameDialog","saveMetadata","editSaving","cancelEdit","onTabClick","handleTabClick","urls","originUrl","readonly","handleUrlClick","mdUrl","htmlUrl","bbUrl","metadata","TgFileId","tgId","S3Location","S3CdnFileUrl","isVideo","src","fileLink","autoplay","muted","loop","openImageLink","isAudio","controls","isImage","fit","lazy","border","column","descColumn","editForm","FileName","FileType","fileSizeDisplay","imageDimensions","Width","Height","orientationIcon","uploadTime","Channel","ChannelName","accessTagType","accessType","Label","UploadIP","UploadAddress","Tags","showRenameDialog","closeRenameDialog","submitRename","renameSaving","renameValidation","onSubmit","renameForm","newFileId","validateRenameInput","INVALID_CHARS","validateFileId","currentFileId","fileType","endsWith","TimeStamp","toLocaleString","listType","ListType","height","ratio","sizeBytes","FileSizeBytes","sizeMB","FileSize","toFixed","handleVideoClick","video","paused","play","select","navigator","clipboard","writeText","open","oldFileId","_component_el_tooltip","selectedCount","disableTooltip","content","handleClear","actions","command","className","Number","_component_el_checkbox","onTouchstart","onTouchend","onTouchmove","localSelected","onChange","handleSelectChange","handlePreviewClick","preload","decoding","displayName","fileNameStart","fileNameEnd","item","tagIndex","background","getTagColor","channelTag","uploadDate","selected","tagColors","parts","getFileName","uploaded","toLocaleDateString","_component_el_card","videoLoading","videoError","onMouseenter","handleVideoHover","onMouseleave","onFullscreenchange","handleFullscreenChange","onWebkitfullscreenchange","onLoadeddata","onError","handleVideoError","previewSrcList","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","isFullscreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","currentTime","isEnter","folderName","showActions","variant","checked","indeterminate","role","ariaChecked","tabindex","handleClick","onKeydown","markIcon","event","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_badge","_component_el_checkbox_group","_component_el_dropdown_menu","_component_el_dropdown","dropdown","localFilters","accessStatus","handleFilterChange","accessStatusOptions","option","listTypeOptions","labelOptions","fileTypeOptions","channel","channelOptions","channelNameOptions","channelName","groupedChannelNames","group","typeLabel","channels","clearFilters","activeFilterCount","hidden","filters","values","reduce","arr","groups","handler","newFilters","isArray","deep","viewBox","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_component_DashboardTabs","_component_FilterDropdown","_component_el_header","_component_DashboardCheckbox","_component_el_radio_button","_component_el_radio_group","_component_el_divider","_component_el_dropdown_item","_component_el_breadcrumb_item","_component_el_breadcrumb","_component_SkeletonLoader","_component_FolderCard","_component_FileCard","_component_FileListItem","_component_el_pagination","_component_el_main","_component_el_container","_component_BatchActionBar","_component_FileDetailDialog","_component_el_radio","_component_el_switch","_component_TagManagementDialog","_component_BatchTagDialog","_component_MobileActionSheet","_component_MobileDirectoryDrawer","_component_MoveFileDialog","tempSearch","handleSearch","suffix","showUrlDialog","handleLogout","selectPage","selectedPageFiles","handleSelectPage","viewMode","setViewMode","onCommand","setSortField","sortOrder","setSortOrder","sortField","sortLabel","cx","cy","showMobileDirectoryDrawer","separator","navigateToFolder","isDragging","onTouchstartPassive","handlePageSwipeStart","onTouchendPassive","handlePageSwipeEnd","onTouchcancelPassive","resetPageSwipe","pageSize","paginatedTableData","hasSearchOrFilter","isSearchMode","onEnter","enterFolder","onCopy","handleFolderCopy","onMove","handleMove","onDelete","handleDelete","handleFolderTouchStart","handleTouchEnd","getFileLink","onDetail","openDetailDialog","handleCopy","onDownload","handleDownload","handleTouchStart","isSelectAll","isIndeterminate","handleSelectAllPage","onFolderCopy","position","left","selectionRect","top","layout","filteredTableData","currentPage","pagerCount","onCurrentChange","handlePageChange","refreshFileList","refreshLoading","ceil","loadMoreData","realTotalPages","jumpPage","handleJumpPage","onAction","handleBatchAction","onClear","clearSelection","showdetailDialog","detailFile","allUrl","onTagManagement","handleTagManagement","onBlock","handleBlock","onWhite","handleWhite","handleDetailDelete","onMetadataUpdated","handleMetadataUpdated","onFileRenamed","handleFileRenamed","defaultUrlFormat","useCustomUrl","customUrlPrefix","showTagDialog","currentTagFile","onTagsUpdated","handleTagsUpdated","showBatchTagDialog","handleBatchTagsUpdated","showMobileActionModal","mobileActionIsFolder","getFolderName","mobileActionFile","handleMobileAction","onNavigate","onGoBack","handleGoBack","showMoveDialog","moveTargetPath","onConfirm","confirmMove","FileManager","FILE_LIST_PATH","fileListCache","storageWarningShown","getLocalFileList","fileList","getMutableFileList","directories","localStorage","getItem","parse","createEmptyFileList","updateFileListCache","persisted","persistFileListCache","cacheUpdated","setItem","handleStoragePersistError","warn","removeItem","removeError","ElMessage","addFile","newFile","addFolder","moveFile","oldPath","newPath","oldFolderIndex","fileIndex","findIndex","pathArray","newFolder","removeFile","removeFolder","getFilesInFolder","subdirectories","buildFilterParams","params","search","includeTags","excludeTags","url","newFileList","isIndexedResponse","loadMoreFiles","start","moreFiles","fileManager","rectIntersects","rectA","rectB","right","bottom","calcSelectionRect","current","useDragSelect","modes","mainSelector","items","startPoint","preSelectSnapshot","isAppendMode","MOBILE_BREAKPOINT","listenerAttached","EDGE_THRESHOLD","SCROLL_SPEED","autoScrollTimer","savedUserSelect","getActiveConfig","toValue","shouldEnable","syncListenerState","attachContainerListener","cancelDrag","detachContainerListener","isBlankArea","mainArea","closest","config","itemEl","itemSelector","container","containerRef","contains","interactive","hasAppendModifier","shiftKey","ctrlKey","metaKey","saveSnapshot","currentItems","lastClientY","startAutoScroll","scrollStep","viewportHeight","innerHeight","scrollDelta","scrollBy","updateSelection","requestAnimationFrame","stopAutoScroll","cancelAnimationFrame","disableTextSelection","userSelect","restoreTextSelection","rect","selRect","itemElements","querySelectorAll","itemRect","getBoundingClientRect","itemBounds","intersects","onMouseDown","button","clientX","clientY","onMouseMove","onMouseUp","currentPoint","_event","onWindowResize","onMounted","onBeforeUnmount","SORT_FIELDS","SORT_ORDERS","getStoredSortValue","validValues","fallback","mixins","backgroundManager","directFileCount","directFolderCount","showLogoutButton","tableData","searchKeywords","searchIncludeTags","searchExcludeTags","isUploading","activeUrlTab","mobileActionIndex","longPressTimer","moveFileKey","moveFileIndex","pageSwipeStartX","pageSwipeStartY","pageSwipeStartTime","DashboardTabs","TagManagementDialog","BatchTagDialog","SkeletonLoader","FileCard","FolderCard","FileListItem","FileDetailDialog","BatchActionBar","MobileActionSheet","MobileDirectoryDrawer","DashboardCheckbox","FilterDropdown","MoveFileDialog","LanguageSwitcher","setup","cardContainerRef","listContainerRef","viewModeRef","itemsRef","card","list","totalPages","sortedData","sortData","fullList","labelKeys","rawName","fieldLabel","orderLabel","detailDialogWidth","ExternalLink","rootUrl","tableColumnNum","tablePreviewSpan","some","userConfig","urlPrefix","location","origin","newData","newFormat","$store","commit","parentPath","colors","formatFileSize","bytes","isNaN","units","searchText","excludeTagRegex","match","includeTagRegex","log","extractChannelNames","typeLabels","telegram","cfr2","s3","discord","huggingface","webdav","entries","channelList","sort","localeCompare","link","href","download","click","tab","$message","$confirm","updateStats","find","handleBatchDelete","promises","results","successNum","handleBatchCopy","folders","$loading","allFiles","links","generateFileLink","copyToClipboardFallback","textarea","clip","execCommand","fetchFileList","num","init","field","order","getSizeInBytes","parseSize","parsedValue","isFinite","sizeInBytes","sizeInMegabytes","getValue","RawName","getTime","compare","valA","valB","videoElement","fetch","credentials","authType","$router","handleBatchDownload","handleBatchMove","handleBatchTagManagement","handleBatchBlock","handleBatchWhite","validation","executeBatchMove","executeSingleMove","newKey","tempData","refreshLocalFileList","zip","fileNameCount","downloadPromises","extension","baseName","URL","createObjectURL","flag","videoExtensions","audioExtensions","imageExtensions","filename","page","isMobileViewport","updateResponsivePageSize","nextPageSize","firstVisibleIndex","isSwipeIgnoredTarget","touch","touches","now","changedTouches","deltaX","deltaY","elapsed","targetPage","goToSwipePage","loadMoreDataUntilPage","targetIndex","currentFolderCount","currentFileCount","neededFileCount","relativePath","maxLength","startLength","endLength","getFileNameStart","dotIndex","keepLength","getFileNameEnd","ext","folderPath","Set","folderItems","fileItems","totalCount","adminLoggedIn","updatedMetadata","isExternal","baseUrl","initializeBackground","adminUrlSettings","savedViewMode"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/596.aa72d40f.js.map.gz b/frontend-dist/js/596.aa72d40f.js.map.gz deleted file mode 100644 index 89516421e1611e4dccaef46540a72cd98afb2acb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149930 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 R94r=3{(sY$=o>?63ILa_;9CFy diff --git a/frontend-dist/js/609.3a7a8c93.js b/frontend-dist/js/609.3a7a8c93.js new file mode 100644 index 0000000..8bcf74b --- /dev/null +++ b/frontend-dist/js/609.3a7a8c93.js @@ -0,0 +1,2 @@ +(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[609],{3261:function(e,t,a){"use strict";a(85331)},4885:function(e,t,a){"use strict";a(85331)},13378:function(e,t,a){"use strict";a(85331),a(38736),a(79899)},15616:function(e,t,a){"use strict";a(85331),a(97197)},23597:function(e,t,a){"use strict";a(85331)},33892:function(e,t,a){"use strict";a.d(t,{A:function(){return S}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(30650)),r=(a(19104),a(31802)),o=(a(13378),a(80047)),l=(a(99648),a(56768)),d=a(45130),c=a(24232);const h={class:"directory-tree-picker"},u={class:"tree-container"},f={key:0,class:"error-state"},m={class:"error-text"},p={class:"node-label"},g={class:"tree-container"},b={key:0,class:"error-state"},v={class:"error-text"},k={class:"node-label"};function y(e,t,a,y,w,_){const F=(0,l.g2)("font-awesome-icon"),C=o.S2,T=r.qk,S=s.Vc,L=n.pw,$=i.A;return(0,l.uX)(),(0,l.CE)("div",h,[_.isDesktop?((0,l.uX)(),(0,l.Wv)(S,{key:0,visible:w.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>w.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,l.k6)(()=>[(0,l.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",u,[w.error?((0,l.uX)(),(0,l.CE)("div",f,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",m,(0,c.v_)(w.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:_.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRef",data:w.treeData,props:w.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:_.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",p,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[$,w.loading]])]),_:3},8,["visible"])):((0,l.uX)(),(0,l.CE)(l.FK,{key:1},[(0,l.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>_.openDrawer&&_.openDrawer(...e))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,l.bF)(L,{modelValue:w.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>w.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",g,[w.error?((0,l.uX)(),(0,l.CE)("div",b,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",v,(0,c.v_)(w.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:_.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRefMobile",data:w.treeData,props:w.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:_.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[$,w.loading]])]),_:1},8,["modelValue","title"])],64))])}var w=a(457),_=a(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,_.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await w.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},C=a(71241);const T=(0,C.A)(F,[["render",y],["__scopeId","data-v-62eab69a"]]);var S=T},34396:function(e,t,a){"use strict";a(85331),a(4885)},34896:function(e,t,a){"use strict";a(85331)},37952:function(e,t,a){"use strict";a(85331),a(97197)},40670:function(e,t,a){"use strict";a(85331),a(99648),a(19104),a(85970)},44813:function(e,t,a){a(44114),a(18111),a(22489),a(7588),a(79577),a(41549),a(49797),a(49631),a(35623),a(59848),function(t){e.exports=t()}(function(){return function e(t,a,i){function n(r,o){if(!a[r]){if(!t[r]){var l=void 0;if(!o&&l)return require(r,!0);if(s)return s(r,!0);var d=new Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}var c=a[r]={exports:{}};t[r][0].call(c.exports,function(e){var a=t[r][1][e];return n(a||e)},c,c.exports,e,t,a,i)}return a[r].exports}for(var s=void 0,r=0;r>2,o=(3&t)<<4|a>>4,l=1>6:64,d=2>4,a=(15&r)<<4|(o=s.indexOf(e.charAt(d++)))>>2,i=(3&o)<<6|(l=s.indexOf(e.charAt(d++))),u[c++]=t,64!==o&&(u[c++]=a),64!==l&&(u[c++]=i);return u}},{"./support":30,"./utils":32}],2:[function(e,t,a){"use strict";var i=e("./external"),n=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),r=e("./stream/DataLengthProbe");function o(e,t,a,i,n){this.compressedSize=e,this.uncompressedSize=t,this.crc32=a,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var e=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new r("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,a){return e.pipe(new s).pipe(new r("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new r("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,a){"use strict";var i=e("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},a.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,a){"use strict";var i=e("./utils"),n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length,0):function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,a){"use strict";a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(e,t,a){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=e("pako"),s=e("./utils"),r=e("./stream/GenericWorker"),o=i?"uint8array":"array";function l(e,t){r.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}a.magic="\b\0",s.inherits(l,r),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){r.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},a.compressWorker=function(e){return new l("Deflate",e)},a.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,a){"use strict";function i(e,t){var a,i="";for(a=0;a>>=8;return i}function n(e,t,a,n,r,c){var h,u,f=e.file,m=e.compression,p=c!==o.utf8encode,g=s.transformTo("string",c(f.name)),b=s.transformTo("string",o.utf8encode(f.name)),v=f.comment,k=s.transformTo("string",c(v)),y=s.transformTo("string",o.utf8encode(v)),w=b.length!==f.name.length,_=y.length!==v.length,F="",C="",T="",S=f.dir,L=f.date,$={crc32:0,compressedSize:0,uncompressedSize:0};t&&!a||($.crc32=e.crc32,$.compressedSize=e.compressedSize,$.uncompressedSize=e.uncompressedSize);var x=0;t&&(x|=8),p||!w&&!_||(x|=2048);var E=0,D=0;S&&(E|=16),"UNIX"===r?(D=798,E|=function(e,t){var a=e;return e||(a=t?16893:33204),(65535&a)<<16}(f.unixPermissions,S)):(D=20,E|=function(e){return 63&(e||0)}(f.dosPermissions)),h=L.getUTCHours(),h<<=6,h|=L.getUTCMinutes(),h<<=5,h|=L.getUTCSeconds()/2,u=L.getUTCFullYear()-1980,u<<=4,u|=L.getUTCMonth()+1,u<<=5,u|=L.getUTCDate(),w&&(C=i(1,1)+i(l(g),4)+b,F+="up"+i(C.length,2)+C),_&&(T=i(1,1)+i(l(k),4)+y,F+="uc"+i(T.length,2)+T);var A="";return A+="\n\0",A+=i(x,2),A+=m.magic,A+=i(h,2),A+=i(u,2),A+=i($.crc32,4),A+=i($.compressedSize,4),A+=i($.uncompressedSize,4),A+=i(g.length,2),A+=i(F.length,2),{fileRecord:d.LOCAL_FILE_HEADER+A+g+F,dirRecord:d.CENTRAL_FILE_HEADER+i(D,2)+A+i(k.length,2)+"\0\0\0\0"+i(E,4)+i(n,4)+g+F+k}}var s=e("../utils"),r=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),d=e("../signature");function c(e,t,a,i){r.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=a,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(c,r),c.prototype.push=function(e){var t=e.meta.percent||0,a=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,r.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:a?(t+100*(a-i-1))/a:100}}))},c.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var a=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:a.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,a=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(a.dirRecord),t)this.push({data:function(e){return d.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:a.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)a=(a<<8)+this.byteAt(t);return this.index+=e,a},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=n},{"../utils":32}],19:[function(e,t,a){"use strict";var i=e("./Uint8ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,a){"use strict";var i=e("./DataReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},n.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},n.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./DataReader":18}],21:[function(e,t,a){"use strict";var i=e("./ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,a){"use strict";var i=e("../utils"),n=e("../support"),s=e("./ArrayReader"),r=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||n.uint8array?"nodebuffer"===t?new o(e):n.uint8array?new l(i.transformTo("uint8array",e)):new s(i.transformTo("array",e)):new r(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,a){"use strict";a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../utils");function s(e){i.call(this,"ConvertWorker to "+e),this.destType=e}n.inherits(s,i),s.prototype.processChunk=function(e){this.push({data:n.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,i),s.prototype.processChunk=function(e){this.streamInfo.crc32=n(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(s,n),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}n.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,a){"use strict";function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a "+e:e}},t.exports=i},{}],29:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./ConvertWorker"),s=e("./GenericWorker"),r=e("../base64"),o=e("../support"),l=e("../external"),d=null;if(o.nodestream)try{d=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function c(e,t){return new l.Promise(function(a,n){var s=[],o=e._internalType,l=e._outputType,d=e._mimeType;e.on("data",function(e,a){s.push(e),t&&t(a)}).on("error",function(e){s=[],n(e)}).on("end",function(){try{var e=function(e,t,a){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),a);case"base64":return r.encode(t);default:return i.transformTo(e,t)}}(l,function(e,t){var a,i=0,n=null,s=0;for(a=0;a>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t}(e)},a.utf8decode=function(e){return n.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,a,n,s,r=e.length,l=new Array(2*r);for(t=a=0;t>10&1023,l[a++]=56320|1023&n)}return l.length!==a&&(l.subarray?l=l.subarray(0,a):l.length=a),i.applyFromCharCode(l)}(e=i.transformTo(n.uint8array?"uint8array":"array",e))},i.inherits(d,r),d.prototype.processChunk=function(e){var t=i.transformTo(n.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(n.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var r=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+o[e[a]]>t?a:t}(t),l=t;r!==t.length&&(n.uint8array?(l=t.subarray(0,r),this.leftOver=t.subarray(r,t.length)):(l=t.slice(0,r),this.leftOver=t.slice(r,t.length))),this.push({data:a.utf8decode(l),meta:e.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=d,i.inherits(c,r),c.prototype.processChunk=function(e){this.push({data:a.utf8encode(e.data),meta:e.meta})},a.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var i=e("./support"),n=e("./base64"),s=e("./nodejsUtils"),r=e("./external");function o(e){return e}function l(e,t){for(var a=0;a>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===n.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===n.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===n.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===n.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,a,i,n=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t},a.buf2binstring=function(e){return l(e,e.length)},a.binstring2buf=function(e){for(var t=new i.Buf8(e.length),a=0,n=t.length;a>10&1023,d[i++]=56320|1023&n)}return l(d,i)},a.utf8border=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+r[e[a]]>t?a:t}},{"./common":41}],43:[function(e,t,a){"use strict";t.exports=function(e,t,a,i){for(var n=65535&e,s=e>>>16&65535,r=0;0!==a;){for(a-=r=2e3>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t,a,n){var s=i,r=n+a;e^=-1;for(var o=n;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,a){"use strict";var i,n=e("../utils/common"),s=e("./trees"),r=e("./adler32"),o=e("./crc32"),l=e("./messages"),d=0,c=4,h=0,u=-2,f=-1,m=4,p=2,g=8,b=9,v=286,k=30,y=19,w=2*v+1,_=15,F=3,C=258,T=C+F+1,S=42,L=113,$=1,x=2,E=3,D=4;function A(e,t){return e.msg=l[t],t}function I(e){return(e<<1)-(4e.avail_out&&(a=e.avail_out),0!==a&&(n.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function B(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,U(e.strm)}function P(e,t){e.pending_buf[e.pending++]=t}function W(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function R(e,t){var a,i,n=e.max_chain_length,s=e.strstart,r=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-T?e.strstart-(e.w_size-T):0,d=e.window,c=e.w_mask,h=e.prev,u=e.strstart+C,f=d[s+r-1],m=d[s+r];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(d[(a=t)+r]===m&&d[a+r-1]===f&&d[a]===d[s]&&d[++a]===d[s+1]){s+=2,a++;do{}while(d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&sl&&0!=--n);return r<=e.lookahead?r:e.lookahead}function N(e){var t,a,i,s,l,d,c,h,u,f,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-T)){for(n.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=a=e.hash_size;i=e.head[--t],e.head[t]=m<=i?i-m:0,--a;);for(t=a=m;i=e.prev[--t],e.prev[t]=m<=i?i-m:0,--a;);s+=m}if(0===e.strm.avail_in)break;if(d=e.strm,c=e.window,h=e.strstart+e.lookahead,u=s,f=void 0,f=d.avail_in,u=F)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F)if(i=s._tr_tally(e,e.strstart-e.match_start,e.match_length-F),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=F){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F&&e.match_length<=e.prev_length){for(n=e.strstart+e.lookahead-F,i=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-F),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=n&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(N(e),0===e.lookahead&&t===d)return $;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+a;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,B(e,!1),0===e.strm.avail_out))return $;if(e.strstart-e.block_start>=e.w_size-T&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):(e.strstart>e.block_start&&(B(e,!1),e.strm.avail_out),$)}),new V(4,4,8,4,O),new V(4,5,16,8,O),new V(4,6,32,32,O),new V(4,4,16,16,M),new V(8,16,32,32,M),new V(8,16,128,128,M),new V(8,32,128,256,M),new V(32,128,258,1024,M),new V(32,258,258,4096,M)],a.deflateInit=function(e,t){return Z(e,t,g,15,8,0)},a.deflateInit2=Z,a.deflateReset=K,a.deflateResetKeep=j,a.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?u:(e.state.gzhead=t,h):u},a.deflate=function(e,t){var a,n,r,l;if(!e||!e.state||5>8&255),P(n,n.gzhead.time>>16&255),P(n,n.gzhead.time>>24&255),P(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),P(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(P(n,255&n.gzhead.extra.length),P(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=o(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(P(n,0),P(n,0),P(n,0),P(n,0),P(n,0),P(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),P(n,3),n.status=L);else{var f=g+(n.w_bits-8<<4)<<8;f|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(f|=32),f+=31-f%31,n.status=L,W(n,f),0!==n.strstart&&(W(n,e.adler>>>16),W(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(r=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending!==n.pending_buf_size));)P(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),U(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&U(e),n.pending+2<=n.pending_buf_size&&(P(n,255&e.adler),P(n,e.adler>>8&255),e.adler=0,n.status=L)):n.status=L),0!==n.pending){if(U(e),0===e.avail_out)return n.last_flush=-1,h}else if(0===e.avail_in&&I(t)<=I(a)&&t!==c)return A(e,-5);if(666===n.status&&0!==e.avail_in)return A(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==d&&666!==n.status){var m=2===n.strategy?function(e,t){for(var a;;){if(0===e.lookahead&&(N(e),0===e.lookahead)){if(t===d)return $;break}if(e.match_length=0,a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?$:x}(n,t):3===n.strategy?function(e,t){for(var a,i,n,r,o=e.window;;){if(e.lookahead<=C){if(N(e),e.lookahead<=C&&t===d)return $;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=F&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=F?(a=s._tr_tally(e,1,e.match_length-F),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(B(e,!1),0===e.strm.avail_out))return $}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?$:x}(n,t):i[n.level].func(n,t);if(m!==E&&m!==D||(n.status=666),m===$||m===E)return 0===e.avail_out&&(n.last_flush=-1),h;if(m===x&&(1===t?s._tr_align(n):5!==t&&(s._tr_stored_block(n,0,0,!1),3===t&&(z(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),U(e),0===e.avail_out))return n.last_flush=-1,h}return t!==c?h:n.wrap<=0?1:(2===n.wrap?(P(n,255&e.adler),P(n,e.adler>>8&255),P(n,e.adler>>16&255),P(n,e.adler>>24&255),P(n,255&e.total_in),P(n,e.total_in>>8&255),P(n,e.total_in>>16&255),P(n,e.total_in>>24&255)):(W(n,e.adler>>>16),W(n,65535&e.adler)),U(e),0=a.w_size&&(0===o&&(z(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new n.Buf8(a.w_size),n.arraySet(f,t,m-a.w_size,a.w_size,0),t=f,m=a.w_size),l=e.avail_in,d=e.next_in,c=e.input,e.avail_in=m,e.next_in=0,e.input=t,N(a);a.lookahead>=F;){for(i=a.strstart,s=a.lookahead-(F-1);a.ins_h=(a.ins_h<>>=y=k>>>24,m-=y,0===(y=k>>>16&255))S[s++]=65535&k;else{if(!(16&y)){if(0==(64&y)){k=p[(65535&k)+(f&(1<>>=y,m-=y),m<15&&(f+=T[i++]<>>=y=k>>>24,m-=y,!(16&(y=k>>>16&255))){if(0==(64&y)){k=g[(65535&k)+(f&(1<>>=y,m-=y,(y=s-r)<_){if(c<(y=_-y)&&a.sane){e.msg="invalid distance too far back",a.mode=30;break e}if(C=u,(F=0)===h){if(F+=d-y,y>3,f&=(1<<(m-=w<<3))-1,e.next_in=i,e.next_out=s,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(f),t.distcode=t.distdyn=new i.Buf32(m),t.sane=1,t.back=-1,c):h}function v(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,b(e)):h}function k(e,t){var a,i;return e&&e.state?(i=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=r.wsize?(i.arraySet(r.window,t,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(s=r.wsize-r.wnext)&&(s=n),i.arraySet(r.window,t,a-n,s,r.wnext),(n-=s)?(i.arraySet(r.window,t,a-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=s,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=s(a.check,N,2,0),w=y=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg="incorrect header check",a.mode=30;break}if(8!=(15&y)){e.msg="unknown compression method",a.mode=30;break}if(w-=4,U=8+(15&(y>>>=4)),0===a.wbits)a.wbits=U;else if(U>a.wbits){e.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(N[0]=255&y,N[1]=y>>>8&255,a.check=s(a.check,N,2,0)),w=y=0,a.mode=3;case 3:for(;w<32;){if(0===v)break e;v--,y+=f[g++]<>>8&255,N[2]=y>>>16&255,N[3]=y>>>24&255,a.check=s(a.check,N,4,0)),w=y=0,a.mode=4;case 4:for(;w<16;){if(0===v)break e;v--,y+=f[g++]<>8),512&a.flags&&(N[0]=255&y,N[1]=y>>>8&255,a.check=s(a.check,N,2,0)),w=y=0,a.mode=5;case 5:if(1024&a.flags){for(;w<16;){if(0===v)break e;v--,y+=f[g++]<>>8&255,a.check=s(a.check,N,2,0)),w=y=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(v<(S=a.length)&&(S=v),S&&(a.head&&(U=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),i.arraySet(a.head.extra,f,g,S,U)),512&a.flags&&(a.check=s(a.check,f,S,g)),v-=S,g+=S,a.length-=S),a.length))break e;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===v)break e;for(S=0;U=f[g+S++],a.head&&U&&a.length<65536&&(a.head.name+=String.fromCharCode(U)),U&&S>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=12;break;case 10:for(;w<32;){if(0===v)break e;v--,y+=f[g++]<>>=7&w,w-=7&w,a.mode=27;break}for(;w<3;){if(0===v)break e;v--,y+=f[g++]<>>=1)){case 0:a.mode=14;break;case 1:if(C(a),a.mode=20,6!==t)break;y>>>=2,w-=2;break e;case 2:a.mode=17;break;case 3:e.msg="invalid block type",a.mode=30}y>>>=2,w-=2;break;case 14:for(y>>>=7&w,w-=7&w;w<32;){if(0===v)break e;v--,y+=f[g++]<>>16^65535)){e.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&y,w=y=0,a.mode=15,6===t)break e;case 15:a.mode=16;case 16:if(S=a.length){if(v>>=5,w-=5,a.ndist=1+(31&y),y>>>=5,w-=5,a.ncode=4+(15&y),y>>>=4,w-=4,286>>=3,w-=3}for(;a.have<19;)a.lens[O[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,P={bits:a.lenbits},B=o(0,a.lens,0,19,a.lencode,0,a.work,P),a.lenbits=P.bits,B){e.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=x,w-=x,a.lens[a.have++]=D;else{if(16===D){for(W=x+2;w>>=x,w-=x,0===a.have){e.msg="invalid bit length repeat",a.mode=30;break}U=a.lens[a.have-1],S=3+(3&y),y>>>=2,w-=2}else if(17===D){for(W=x+3;w>>=x)),y>>>=3,w-=3}else{for(W=x+7;w>>=x)),y>>>=7,w-=7}if(a.have+S>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=30;break}for(;S--;)a.lens[a.have++]=U}}if(30===a.mode)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,P={bits:a.lenbits},B=o(l,a.lens,0,a.nlen,a.lencode,0,a.work,P),a.lenbits=P.bits,B){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,P={bits:a.distbits},B=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,P),a.distbits=P.bits,B){e.msg="invalid distances set",a.mode=30;break}if(a.mode=20,6===t)break e;case 20:a.mode=21;case 21:if(6<=v&&258<=k){e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=w,r(e,F),b=e.next_out,m=e.output,k=e.avail_out,g=e.next_in,f=e.input,v=e.avail_in,y=a.hold,w=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;E=(R=a.lencode[y&(1<>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>A)])>>>16&255,D=65535&R,!(A+(x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=A,w-=A,a.back+=A}if(y>>>=x,w-=x,a.back+=x,a.length=D,0===E){a.mode=26;break}if(32&E){a.back=-1,a.mode=12;break}if(64&E){e.msg="invalid literal/length code",a.mode=30;break}a.extra=15&E,a.mode=22;case 22:if(a.extra){for(W=a.extra;w>>=a.extra,w-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;E=(R=a.distcode[y&(1<>>16&255,D=65535&R,!((x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>A)])>>>16&255,D=65535&R,!(A+(x=R>>>24)<=w);){if(0===v)break e;v--,y+=f[g++]<>>=A,w-=A,a.back+=A}if(y>>>=x,w-=x,a.back+=x,64&E){e.msg="invalid distance code",a.mode=30;break}a.offset=D,a.extra=15&E,a.mode=24;case 24:if(a.extra){for(W=a.extra;w>>=a.extra,w-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===k)break e;if(S=F-k,a.offset>S){if((S=a.offset-S)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=30;break}L=S>a.wnext?(S-=a.wnext,a.wsize-S):a.wnext-S,S>a.length&&(S=a.length),$=a.window}else $=m,L=b-a.offset,S=a.length;for(kv?(y=P[W+h[C]],I[z+h[C]]):(y=96,0),f=1<>x)+(m-=f)]=k<<24|y<<16|w,0!==m;);for(f=1<>=1;if(0!==f?(A&=f-1,A+=f):A=0,C++,0==--U[F]){if(F===S)break;F=t[a+h[C]]}if(L>>7)]}function P(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function W(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1,0<--t;);return a>>>1}function O(e,t,a){var i,n,s=new Array(m+1),r=0;for(i=1;i<=m;i++)s[i]=r=r+a[i-1]<<1;for(n=0;n<=t;n++){var o=e[2*n+1];0!==o&&(e[2*n]=N(s[o]++,o))}}function M(e){var t;for(t=0;t>1;1<=a;a--)j(e,s,a);for(n=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,s,1),i=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=i,s[2*n]=s[2*a]+s[2*i],e.depth[n]=(e.depth[a]>=e.depth[i]?e.depth[a]:e.depth[i])+1,s[2*a+1]=s[2*i+1]=n,e.heap[1]=n++,j(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,i,n,s,r,o,l=t.dyn_tree,d=t.max_code,c=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,g=t.stat_desc.max_length,b=0;for(s=0;s<=m;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;a>=7;i>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return n;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=a+5,a+4<=r&&-1!==t?Q(e,t,a,i):4===e.strategy||o===r?(W(e,2+(i?1:0),3),K(e,T,S)):(W(e,4+(i?1:0),3),function(e,t,a,i){var n;for(W(e,t-257,5),W(e,a-1,5),W(e,i-4,4),n=0;n>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*($[a]+d+1)]++,e.dyn_dtree[2*B(t)]++),e.last_lit===e.lit_bufsize-1},a._tr_align=function(e){W(e,2,3),R(e,b,T),function(e){16===e.bi_valid?(P(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,a){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,i){(function(e){!function(e,t){"use strict";if(!e.setImmediate){var a,i,n,s,r=1,o={},l=!1,d=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,a="[object process]"==={}.toString.call(e.process)?function(e){process.nextTick(function(){u(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=a,t}}()?(s="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",f,!1):e.attachEvent("onmessage",f),function(t){e.postMessage(s+t,"*")}):e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){u(e.data)},function(e){n.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,function(e){var t=d.createElement("script");t.onreadystatechange=function(){u(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):function(e){setTimeout(u,0,e)},c.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return n.test(e)?{valid:!1,error:i.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},63003:function(e,t,a){"use strict";a(85331)},70415:function(e,t,a){"use strict";a(85331),a(73565)},72907:function(e,t,a){"use strict";a(85331),a(96808),a(29092)},73565:function(e,t,a){"use strict";a(85331)},79899:function(e,t,a){"use strict";a(85331)},88830:function(e,t,a){"use strict";a(85331)},94251:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return En}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(31802)),r=(a(13378),a(9267)),o=(a(15616),a(33892)),l=a(80047),d=(a(99648),a(39623)),c=(a(29092),a(56768)),h=a(24232);const u={class:"move-file-dialog-wrapper"},f={class:"move-dialog-content"},m={class:"move-path-input-container"},p={class:"move-dialog-hint"},g={class:"dialog-footer"},b={class:"move-drawer-content"},v={class:"move-path-section"},k={class:"move-path-label"},y={class:"move-path-input-row"},w={class:"move-dialog-hint"},_={key:0,class:"embedded-tree-section"},F={class:"tree-section-header"},C={class:"tree-section-title"},T={class:"tree-container"},S={key:0,class:"error-state"},L={class:"error-text"},$={class:"node-label"},x={class:"drawer-footer"};function E(e,t,a,E,D,A){const I=d.WK,z=(0,c.g2)("font-awesome-icon"),U=l.S2,B=o.A,P=r.kZ,W=s.qk,R=n.pw,N=i.A;return(0,c.uX)(),(0,c.CE)("div",u,[A.isDesktop?((0,c.uX)(),(0,c.Wv)(P,{key:0,modelValue:A.dialogVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),width:"500px","show-close":!0,class:"move-dialog",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",g,[(0,c.bF)(U,{onClick:A.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(U,{type:"primary",loading:D.loading,onClick:A.handleConfirm},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",f,[(0,c.Lk)("div",m,[(0,c.bF)(I,{modelValue:D.targetPath,"onUpdate:modelValue":t[0]||(t[0]=e=>D.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},{prepend:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.targetDirectory")),1)]),_:1},8,["modelValue","placeholder"]),(0,c.bF)(B,{"current-directory":a.currentDirectory,source:"admin",onSelect:A.handleDirectorySelect},{trigger:(0,c.k6)(()=>[(0,c.bF)(U,{class:"directory-picker-trigger"},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])]),(0,c.Lk)("p",p,(0,h.v_)(e.$t("moveFile.hint")),1)])]),_:1},8,["modelValue","title","onClose"])):((0,c.uX)(),(0,c.Wv)(R,{key:1,modelValue:A.dialogVisible,"onUpdate:modelValue":t[5]||(t[5]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),direction:"btt",size:"auto","show-close":!0,class:"move-drawer",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("div",x,[(0,c.bF)(U,{onClick:A.handleClose,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(U,{type:"primary",loading:D.loading,onClick:A.handleConfirm,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",b,[(0,c.Lk)("div",v,[(0,c.Lk)("div",k,(0,h.v_)(e.$t("moveFile.targetDirectory")),1),(0,c.Lk)("div",y,[(0,c.bF)(I,{modelValue:D.targetPath,"onUpdate:modelValue":t[2]||(t[2]=e=>D.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},null,8,["modelValue","placeholder"]),(0,c.bF)(U,{class:"directory-picker-trigger",onClick:t[3]||(t[3]=e=>D.showTreePicker=!0)},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"folder-tree"})]),_:1})]),(0,c.Lk)("p",w,(0,h.v_)(e.$t("moveFile.hintMobile")),1)]),D.showTreePicker?((0,c.uX)(),(0,c.CE)("div",_,[(0,c.Lk)("div",F,[(0,c.Lk)("span",C,(0,h.v_)(e.$t("moveFile.selectDirectory")),1),(0,c.bF)(U,{text:"",onClick:t[4]||(t[4]=e=>D.showTreePicker=!1)},{default:(0,c.k6)(()=>[(0,c.bF)(z,{icon:"times"})]),_:1})]),(0,c.bo)(((0,c.uX)(),(0,c.CE)("div",T,[D.treeError?((0,c.uX)(),(0,c.CE)("div",S,[(0,c.bF)(z,{icon:"exclamation-circle",class:"error-icon"}),(0,c.Lk)("span",L,(0,h.v_)(D.treeError),1),(0,c.bF)(U,{type:"primary",size:"small",onClick:A.fetchDirectoryTree},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.retry")),1)]),_:1},8,["onClick"])])):((0,c.uX)(),(0,c.Wv)(W,{key:1,ref:"treeRef",data:D.treeData,props:D.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:A.handleTreeNodeClick},{default:(0,c.k6)(({node:e,data:t})=>[(0,c.Lk)("span",{class:(0,h.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,c.bF)(z,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,c.Lk)("span",$,(0,h.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[N,D.treeLoading]])])):(0,c.Q3)("",!0)])]),_:1},8,["modelValue","title","onClose"]))])}var D=a(70797),A={name:"MoveFileDialog",components:{DirectoryTreePicker:o.A},props:{modelValue:{type:Boolean,default:!1},currentDirectory:{type:String,default:""},isBatchMove:{type:Boolean,default:!1},initialPath:{type:String,default:"/"}},emits:["update:modelValue","confirm","close"],data(){return{targetPath:"/",loading:!1,windowWidth:window.innerWidth,showTreePicker:!1,treeData:[],treeLoading:!1,treeError:"",treeProps:{children:"children",label:"name"}}},computed:{dialogVisible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},isDesktop(){return this.windowWidth>768}},watch:{modelValue(e){e&&(this.targetPath=this.initialPath||"/",this.showTreePicker=!1)},showTreePicker(e){e&&!this.isDesktop&&this.fetchDirectoryTree()}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},handleDirectorySelect(e){this.targetPath=e},handleConfirm(){this.$emit("confirm",this.targetPath)},handleClose(){this.$emit("update:modelValue",!1),this.$emit("close")},async fetchDirectoryTree(){this.treeLoading=!0,this.treeError="";try{const e=await(0,D.A)("/api/directoryTree",{method:"GET"});if(!e.ok)return void(401===e.status?this.treeError=this.$t("moveFile.authFailed"):this.treeError=this.$t("moveFile.serverError"));const t=await e.json();t.tree?this.treeData=[t.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),this.treeError=this.$t("moveFile.loadTreeFailed")}finally{this.treeLoading=!1}},handleTreeNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.targetPath=t,this.showTreePicker=!1}}},I=a(71241);const z=(0,I.A)(A,[["render",E],["__scopeId","data-v-7aaa437c"]]);var U=z,B=a(45130);const P={class:"mobile-drawer-header"},W={class:"mobile-drawer-title"},R={class:"mobile-drawer-content"},N=["onClick"];function O(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"drawer-slide"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-overlay",onClick:t[3]||(t[3]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"mobile-drawer",onClick:t[2]||(t[2]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",P,[(0,c.Lk)("span",W,(0,h.v_)(e.$t("mobileDirectory.title")),1),(0,c.bF)(r,{icon:"times",class:"mobile-drawer-close",onClick:s.close},null,8,["onClick"])]),(0,c.Lk)("div",R,[(0,c.Lk)("div",{class:(0,h.C4)(["mobile-drawer-item",{active:!a.currentPath}]),onClick:t[0]||(t[0]=e=>s.navigate(""))},[(0,c.bF)(r,{icon:"home",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.rootDirectory")),1)],2),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.pathParts,(e,t)=>((0,c.uX)(),(0,c.CE)("div",{key:t,class:(0,h.C4)(["mobile-drawer-item",{active:t===s.pathParts.length-1}]),style:(0,h.Tr)({paddingLeft:16*(t+1)+16+"px"}),onClick:e=>s.navigate(s.pathParts.slice(0,t+1).join("/"))},[(0,c.bF)(r,{icon:"folder",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e),1)],14,N))),128)),a.currentPath?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-back",onClick:t[1]||(t[1]=(...e)=>s.goBack&&s.goBack(...e))},[(0,c.bF)(r,{icon:"arrow-left",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.goBack")),1)])):(0,c.Q3)("",!0)])])])):(0,c.Q3)("",!0)]),_:1})])}a(18111),a(22489);var M={name:"MobileDirectoryDrawer",props:{modelValue:{type:Boolean,default:!1},currentPath:{type:String,default:""}},emits:["update:modelValue","navigate","goBack"],computed:{pathParts(){return this.currentPath.split("/").filter(Boolean)}},methods:{close(){this.$emit("update:modelValue",!1)},navigate(e){this.$emit("navigate",e),this.close()},goBack(){this.$emit("goBack"),this.close()}}};const V=(0,I.A)(M,[["render",O],["__scopeId","data-v-feeadb1c"]]);var X=V;const j={class:"bottom-sheet-header"},K={class:"bottom-sheet-title"},Z={class:"bottom-sheet-content"};function H(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"bottom-sheet"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"bottom-sheet-overlay",onClick:t[9]||(t[9]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"bottom-sheet",onClick:t[8]||(t[8]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",j,[t[10]||(t[10]=(0,c.Lk)("div",{class:"bottom-sheet-handle"},null,-1)),(0,c.Lk)("span",K,(0,h.v_)(a.title),1)]),(0,c.Lk)("div",Z,[a.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[5]||(t[5]=e=>s.handleAction("folderCopy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[6]||(t[6]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFolder")),1)])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[0]||(t[0]=e=>s.handleAction("detail"))},[(0,c.bF)(r,{icon:"info-circle",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.viewDetail")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[1]||(t[1]=e=>s.handleAction("copy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[2]||(t[2]=e=>s.handleAction("download"))},[(0,c.bF)(r,{icon:"download",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.downloadFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[3]||(t[3]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[4]||(t[4]=e=>s.handleAction("tag"))},[(0,c.bF)(r,{icon:"tags",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.tagManagement")),1)])],64)),(0,c.Lk)("div",{class:"bottom-sheet-item bottom-sheet-danger",onClick:t[7]||(t[7]=e=>s.handleAction("delete"))},[(0,c.bF)(r,{icon:"trash-alt",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(a.isFolder?e.$t("mobileAction.deleteFolder"):e.$t("mobileAction.deleteFile")),1)])])])])):(0,c.Q3)("",!0)]),_:1})])}var G={name:"MobileActionSheet",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},isFolder:{type:Boolean,default:!1}},emits:["update:modelValue","action"],methods:{close(){this.$emit("update:modelValue",!1)},handleAction(e){this.$emit("action",e),this.close()}}};const q=(0,I.A)(G,[["render",H],["__scopeId","data-v-f5c66568"]]);var Q=q,Y=a(4275),J=a(89559),ee=a(12687);a(18785);const te={class:"batch-tag-container"},ae={class:"tab-content"},ie={class:"tab-description"},ne={class:"input-section"},se={key:0,class:"suggestions-panel"},re=["onClick"],oe={class:"tags-to-add-section"},le={key:0,class:"tags-container"},de={key:1,class:"empty-message"},ce={class:"action-buttons"},he={class:"tab-content"},ue={class:"tab-description"},fe={key:0,class:"common-tags-section"},me={class:"tags-container"},pe={key:1,class:"empty-message"},ge={class:"tab-content"},be={class:"tab-description"},ve={class:"action-buttons"};function ke(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=Y.v$,g=J.KR,b=Y.q,v=r.kZ;return(0,c.uX)(),(0,c.Wv)(v,{title:e.$t("batchTag.title"),modelValue:s.visible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{default:(0,c.k6)(()=>[(0,c.Lk)("div",te,[(0,c.bF)(b,{modelValue:n.activeTab,"onUpdate:modelValue":t[1]||(t[1]=e=>n.activeTab=e),type:"border-card"},{default:(0,c.k6)(()=>[(0,c.bF)(p,{label:e.$t("batchTag.addTab"),name:"add"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ae,[(0,c.Lk)("p",ie,(0,h.v_)(e.$t("batchTag.addDescription",{count:s.fileCount})),1),(0,c.Lk)("div",ne,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("batchTag.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddInputTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddInputTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,re))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",oe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.pendingTags")),1),n.tagsToAdd.length>0?((0,c.uX)(),(0,c.CE)("div",le,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.tagsToAdd,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.removeFromToAdd(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",de,(0,h.v_)(e.$t("batchTag.noPendingTags")),1))]),(0,c.Lk)("div",ce,[(0,c.bF)(u,{type:"primary",onClick:s.executeAddTags,loading:n.loading,disabled:0===n.tagsToAdd.length},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.addToAllFiles")),1)]),_:1},8,["onClick","loading","disabled"])])])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.removeTab"),name:"remove"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",he,[(0,c.Lk)("p",ue,(0,h.v_)(e.$t("batchTag.removeDescription")),1),n.commonTags.length>0?((0,c.uX)(),(0,c.CE)("div",fe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.commonTags")),1),(0,c.Lk)("div",me,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.commonTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveCommonTag(e),class:"tag-item",type:"warning"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])])):((0,c.uX)(),(0,c.CE)("div",pe,(0,h.v_)(e.$t("batchTag.noCommonTags")),1))])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.clearTab"),name:"clear"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ge,[(0,c.Lk)("p",be,(0,h.v_)(e.$t("batchTag.clearDescription",{count:s.fileCount})),1),(0,c.bF)(g,{title:e.$t("batchTag.clearWarningTitle"),type:"warning",description:e.$t("batchTag.clearWarningDesc"),closable:!1,style:{"margin-bottom":"20px"},center:""},null,8,["title","description"]),(0,c.Lk)("div",ve,[(0,c.bF)(u,{type:"danger",onClick:s.handleClearAllTags,loading:n.loading},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.confirmClearAll")),1)]),_:1},8,["onClick","loading"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["title","modelValue","width","onClose"])}a(44114),a(61701);var ye=a(51219),we=a(12933),_e={name:"BatchTagDialog",props:{modelValue:{type:Boolean,default:!1},selectedFiles:{type:Array,required:!0,default:()=>[]}},emits:["update:modelValue","tagsUpdated"],data(){return{activeTab:"add",inputTag:"",tagsToAdd:[],commonTags:[],suggestions:[],showSuggestions:!1,loading:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"600px"},selectedFilesOnly(){return this.selectedFiles.filter(e=>!e.isFolder)},fileCount(){return this.selectedFilesOnly.length},fileIds(){return this.selectedFilesOnly.map(e=>e.name)}},watch:{visible(e){e?this.loadCommonTags():this.resetData()},activeTab(e){"remove"===e&&this.loadCommonTags()}},methods:{resetData(){this.tagsToAdd=[],this.inputTag="",this.showSuggestions=!1,this.activeTab="add"},async loadCommonTags(){if(0!==this.selectedFilesOnly.length)try{const e=this.selectedFilesOnly.map(e=>(0,D.A)(`/api/manage/tags/${encodeURIComponent(e.name)}`,{method:"GET"})),t=await Promise.all(e),a=[];for(const i of t)if(i.ok){const e=await i.json();a.push(e.tags||[])}a.length>0?this.commonTags=a[0].filter(e=>a.every(t=>t.includes(e))):this.commonTags=[]}catch(e){console.error("Error loading common tags:",e),ye.nk.error(this.$t("batchTag.loadCommonTagsFailed"))}else this.commonTags=[]},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,D.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.tagsToAdd.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddInputTag()},handleAddInputTag(){const e=this.inputTag.trim();if(e){if(this.tagsToAdd.includes(e))return ye.nk.warning(this.$t("batchTag.tagAlreadyInList")),this.inputTag="",void(this.showSuggestions=!1);this.tagsToAdd.push(e),this.inputTag="",this.showSuggestions=!1}},removeFromToAdd(e){const t=this.tagsToAdd.indexOf(e);t>-1&&this.tagsToAdd.splice(t,1)},async executeAddTags(){if(0!==this.tagsToAdd.length){this.loading=!0;try{const e=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"add",tags:this.tagsToAdd})});if(!e.ok)throw new Error(this.$t("batchTag.addFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.addFailed"));ye.nk.success(this.$t("batchTag.addSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.tagsToAdd=[]}}catch(e){console.error("Error adding tags:",e),ye.nk.error(this.$t("batchTag.addFailed"))}finally{this.loading=!1}}else ye.nk.warning(this.$t("batchTag.pleaseAddTags"))},async handleRemoveCommonTag(e){this.loading=!0;try{const t=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("batchTag.removeFailed"));{const e=await t.json();if(!(e.success||e.updated>0))throw new Error(this.$t("batchTag.removeFailed"));ye.nk.success(this.$t("batchTag.removeSuccess",{count:e.updated})),this.$emit("tagsUpdated"),await this.loadCommonTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("batchTag.removeFailed"))}finally{this.loading=!1}},handleClearAllTags(){we.s.confirm(this.$t("batchTag.clearConfirmMessage",{count:this.fileCount}),this.$t("batchTag.clearConfirmTitle"),{confirmButtonText:this.$t("batchTag.clearConfirmOk"),cancelButtonText:this.$t("batchTag.clearConfirmCancel"),type:"warning"}).then(()=>{this.executeClearTags()}).catch(()=>{ye.nk.info(this.$t("batchTag.clearCancelled"))})},async executeClearTags(){this.loading=!0;try{const e=await(0,D.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"set",tags:[]})});if(!e.ok)throw new Error(this.$t("batchTag.clearFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.clearFailed"));ye.nk.success(this.$t("batchTag.clearSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.commonTags=[]}}catch(e){console.error("Error clearing tags:",e),ye.nk.error(this.$t("batchTag.clearFailed"))}finally{this.loading=!1}},handleClose(){this.visible=!1}}};const Fe=(0,I.A)(_e,[["render",ke],["__scopeId","data-v-54f87f24"]]);var Ce=Fe,Te=a(813);a(34896);const Se={class:"tag-management-container"},Le={class:"input-section"},$e={key:0,class:"suggestions-panel"},xe=["onClick"],Ee={class:"current-tags-section"},De={key:0,class:"tags-container"},Ae={key:1,class:"empty-message"},Ie={class:"popular-tags-section"},ze={key:0,class:"tags-container"},Ue={key:1,class:"empty-message"},Be={key:2,class:"empty-message"},Pe={class:"dialog-footer"};function We(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=(0,c.g2)("Loading"),g=Te.tk,b=r.kZ;return(0,c.uX)(),(0,c.Wv)(b,{title:e.$t("tagManagement.title"),modelValue:s.visible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",Pe,[(0,c.bF)(u,{onClick:s.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("tagManagement.close")),1)]),_:1},8,["onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",Se,[(0,c.Lk)("div",Le,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("tagManagement.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",$e,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,xe))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Ee,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.currentTags")),1),n.currentTags.length>0?((0,c.uX)(),(0,c.CE)("div",De,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveTag(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",Ae,(0,h.v_)(e.$t("tagManagement.noTags")),1))]),(0,c.Lk)("div",Ie,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.popularTags")),1),n.popularTags.length>0?((0,c.uX)(),(0,c.CE)("div",ze,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.popularTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,onClick:t=>s.handleAddPopularTag(e),class:"tag-item clickable",type:"info"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))])):n.loadingPopularTags?((0,c.uX)(),(0,c.CE)("div",Ue,[(0,c.bF)(g,{class:"is-loading"},{default:(0,c.k6)(()=>[(0,c.bF)(p)]),_:1}),(0,c.eW)(" "+(0,h.v_)(e.$t("tagManagement.loading")),1)])):((0,c.uX)(),(0,c.CE)("div",Be,(0,h.v_)(e.$t("tagManagement.noPopularTags")),1))])])]),_:1},8,["title","modelValue","width","onClose"])}var Re=a(57477),Ne={name:"TagManagementDialog",components:{Loading:Re.Loading},props:{modelValue:{type:Boolean,default:!1},fileId:{type:String,required:!0}},emits:["update:modelValue","tagsUpdated"],data(){return{currentTags:[],inputTag:"",suggestions:[],popularTags:[],showSuggestions:!1,loading:!1,loadingPopularTags:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"500px"}},watch:{visible(e){e&&(this.loadFileTags(),this.loadPopularTags())}},methods:{async loadFileTags(){try{const e=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"GET"});if(!e.ok)throw new Error("Failed to load tags");{const t=await e.json();this.currentTags=t.tags||[]}}catch(e){console.error("Error loading file tags:",e),ye.nk.error(this.$t("tagManagement.loadFailed"))}},async loadPopularTags(){this.loadingPopularTags=!0;try{const e=await(0,D.A)("/api/manage/tags/autocomplete?limit=20",{method:"GET"});if(e.ok){const t=await e.json();this.popularTags=(t.tags||[]).filter(e=>!this.currentTags.includes(e))}}catch(e){console.error("Error loading popular tags:",e)}finally{this.loadingPopularTags=!1}},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,D.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.currentTags.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddTag()},async handleAddTag(){const e=this.inputTag.trim();if(e){if(this.currentTags.includes(e))return ye.nk.warning(this.$t("tagManagement.tagExists")),this.inputTag="",void(this.showSuggestions=!1);try{const t=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add",tags:[e]})});if(!t.ok){const e=await t.json();throw new Error(e.message||this.$t("tagManagement.addFailed"))}{const e=await t.json();this.currentTags=e.tags||[],this.inputTag="",this.showSuggestions=!1,ye.nk.success(this.$t("tagManagement.addSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error adding tag:",t),ye.nk.error(t.message||this.$t("tagManagement.addFailed"))}}},async handleRemoveTag(e){try{const t=await(0,D.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("tagManagement.removeFailed"));{const e=await t.json();this.currentTags=e.tags||[],ye.nk.success(this.$t("tagManagement.removeSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("tagManagement.removeFailed"))}},handleAddPopularTag(e){this.inputTag=e,this.handleAddTag()},handleClose(){this.visible=!1,this.inputTag="",this.showSuggestions=!1,this.currentTags=[],this.popularTags=[]}}};const Oe=(0,I.A)(Ne,[["render",We],["__scopeId","data-v-1dabc380"]]);var Me=Oe,Ve=a(55558),Xe=(a(10456),a(66810)),je=(a(4885),a(82006)),Ke=(a(98642),a(63003),a(59869)),Ze=(a(70415),a(73565),a(57009));a(78450);const He={class:"detail-actions"},Ge={class:"preview-section"},qe={class:"preview-content"},Qe=["src"],Ye=["src"],Je={key:1},et={key:1},tt={key:0,style:{display:"flex","align-items":"center",gap:"6px"}},at={key:1,style:{color:"var(--el-text-color-secondary)"}},it={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"5px"}},nt={key:1,style:{color:"var(--el-text-color-secondary)"}};function st(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=Y.v$,p=Y.q,g=Ze.Zq,b=Ke.MF,v=ee.u,k=Ke.TS,y=je.xE,w=je.US,_=r.kZ;return(0,c.uX)(),(0,c.Wv)(_,{title:e.$t("fileDetail.title"),modelValue:s.visible,"onUpdate:modelValue":t[24]||(t[24]=e=>s.visible=e),width:s.dialogWidth},{default:(0,c.k6)(()=>[(0,c.Lk)("div",He,[n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:0,type:"primary",onClick:t[0]||(t[0]=t=>e.$emit("download")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"download",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.download")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:1,type:"primary",onClick:t[1]||(t[1]=t=>e.$emit("tagManagement")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"tags",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.tags")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:2,type:"primary",onClick:t[2]||(t[2]=t=>e.$emit("block")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"ban",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.blacklist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:3,type:"primary",onClick:t[3]||(t[3]=t=>e.$emit("white")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"shield-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.whitelist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:4,type:"danger",onClick:t[4]||(t[4]=t=>e.$emit("delete")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"trash-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.deleteBtn")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:5,type:"warning",onClick:t[5]||(t[5]=e=>s.startEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"edit",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.edit")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:6,type:"info",onClick:t[6]||(t[6]=e=>s.openRenameDialog()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"i-cursor",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.rename")),1)]),_:1})),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:7,type:"success",onClick:t[7]||(t[7]=e=>s.saveMetadata()),round:"",size:"small",class:"detail-action",loading:n.editSaving},{default:(0,c.k6)(()=>[n.editSaving?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"save",style:{"margin-right":"3px"}})),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.save")),1)]),_:1},8,["loading"])):(0,c.Q3)("",!0),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:8,onClick:t[8]||(t[8]=e=>s.cancelEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.cancel")),1)]),_:1})):(0,c.Q3)("",!0)]),(0,c.bF)(p,{modelValue:n.activeTab,"onUpdate:modelValue":t[16]||(t[16]=e=>n.activeTab=e),onTabClick:s.handleTabClick,style:{"margin-bottom":"10px"}},{default:(0,c.k6)(()=>[(0,c.bF)(m,{label:e.$t("fileDetail.originUrl"),name:"originUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.originUrl,"onUpdate:modelValue":t[9]||(t[9]=e=>a.urls.originUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1},8,["label"]),(0,c.bF)(m,{label:"Markdown",name:"mdUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.mdUrl,"onUpdate:modelValue":t[10]||(t[10]=e=>a.urls.mdUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"HTML",name:"htmlUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.htmlUrl,"onUpdate:modelValue":t[11]||(t[11]=e=>a.urls.htmlUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"BBCode",name:"bbUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.bbUrl,"onUpdate:modelValue":t[12]||(t[12]=e=>a.urls.bbUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),a.file?.metadata?.TgFileId?((0,c.uX)(),(0,c.Wv)(m,{key:0,label:"TG File ID",name:"tgId"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.tgId,"onUpdate:modelValue":t[13]||(t[13]=e=>a.urls.tgId=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3Location?((0,c.uX)(),(0,c.Wv)(m,{key:1,label:"S3 Location",name:"s3Location"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3Location,"onUpdate:modelValue":t[14]||(t[14]=e=>a.urls.S3Location=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3CdnFileUrl?((0,c.uX)(),(0,c.Wv)(m,{key:2,label:"S3 CDN URL",name:"s3CdnFileUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3CdnFileUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>a.urls.S3CdnFileUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0)]),_:1},8,["modelValue","onTabClick"]),(0,c.Lk)("div",Ge,[(0,c.Lk)("div",qe,[s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:0,src:a.fileLink,autoplay:"",muted:"",loop:"",class:"video-preview",onClick:t[17]||(t[17]=(...e)=>s.openImageLink&&s.openImageLink(...e))},null,8,Qe)):s.isAudio?((0,c.uX)(),(0,c.CE)("audio",{key:1,src:a.fileLink,controls:"",autoplay:"",class:"audio-preview"},null,8,Ye)):s.isImage?((0,c.uX)(),(0,c.Wv)(g,{key:2,src:a.fileLink,"preview-src-list":[a.fileLink],"preview-teleported":!0,fit:"contain",lazy:"",class:"image-preview"},null,8,["src","preview-src-list"])):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"file-icon-detail"}))])]),(0,c.bF)(k,{border:"",column:s.descColumn},{default:(0,c.k6)(()=>[(0,c.bF)(b,{label:e.$t("fileDetail.fileNameLabel")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileName,"onUpdate:modelValue":t[18]||(t[18]=e=>n.editForm.FileName=e),size:"small",placeholder:e.$t("fileDetail.fileNamePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",Je,(0,h.v_)(a.file?.metadata?.FileName||a.file?.name),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileType")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileType,"onUpdate:modelValue":t[19]||(t[19]=e=>n.editForm.FileType=e),size:"small",placeholder:e.$t("fileDetail.fileTypePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",et,(0,h.v_)(a.file?.metadata?.FileType||e.$t("fileDetail.unknown")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileSizeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.fileSizeDisplay),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.imageDimensions")},{default:(0,c.k6)(()=>[s.imageDimensions?((0,c.uX)(),(0,c.CE)("div",tt,[(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Width)+" × "+(0,h.v_)(a.file?.metadata?.Height),1),(0,c.bF)(v,{size:"small",type:"info",style:{display:"inline-flex","align-items":"center","justify-content":"center"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.orientationIcon),1)]),_:1})])):((0,c.uX)(),(0,c.CE)("span",at,(0,h.v_)(e.$t("fileDetail.noDimensions")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadTimeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.uploadTime),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.channelTypeAndName")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:"info",style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.Channel||e.$t("fileDetail.unknown")),1)]),_:1}),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.ChannelName||"-"),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.accessStatusAndReview")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:s.accessTagType,style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.accessType),1)]),_:1},8,["type"]),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Label||e.$t("fileDetail.noTags")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadIP")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadIP||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadAddressLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadAddress||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileTags")},{default:(0,c.k6)(()=>[a.file?.metadata?.Tags&&a.file?.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",it,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.file?.metadata?.Tags,e=>((0,c.uX)(),(0,c.Wv)(v,{key:e,size:"small"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1024))),128))])):((0,c.uX)(),(0,c.CE)("span",nt,(0,h.v_)(e.$t("fileDetail.noTags")),1))]),_:1},8,["label"])]),_:1},8,["column"]),(0,c.bF)(_,{modelValue:n.showRenameDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showRenameDialog=e),title:e.$t("fileDetail.renameTitle"),width:s.dialogWidth,"append-to-body":""},{footer:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:t[21]||(t[21]=e=>s.closeRenameDialog())},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameCancel")),1)]),_:1}),(0,c.bF)(u,{type:"primary",onClick:t[22]||(t[22]=e=>s.submitRename()),loading:n.renameSaving,disabled:!n.renameValidation.valid},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameConfirm")),1)]),_:1},8,["loading","disabled"])]),default:(0,c.k6)(()=>[(0,c.bF)(w,{onSubmit:(0,B.D$)(s.submitRename,["prevent"])},{default:(0,c.k6)(()=>[(0,c.bF)(y,{label:e.$t("fileDetail.renameLabel"),error:n.renameValidation.error},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:n.renameForm.newFileId,"onUpdate:modelValue":t[20]||(t[20]=e=>n.renameForm.newFileId=e),placeholder:e.$t("fileDetail.renamePlaceholder"),onInput:s.validateRenameInput,clearable:""},null,8,["modelValue","placeholder","onInput"])]),_:1},8,["label","error"])]),_:1},8,["onSubmit"])]),_:1},8,["modelValue","title","width"])]),_:1},8,["title","modelValue","width"])}const rt=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;function ot(e,t){return e&&""!==e.trim()?e===t?{valid:!1,error:"文件名未发生变化"}:e.includes("..")?{valid:!1,error:'文件名不能包含路径穿越字符 ".."'}:/\/\.\//.test(e)||/^\.\//.test(e)?{valid:!1,error:'文件名不能包含单独的 "." 路径段'}:rt.test(e)?{valid:!1,error:"文件名包含非法字符,请使用合法的文件名格式"}:e.includes("//")?{valid:!1,error:"文件名不能包含连续的斜杠"}:{valid:!0}:{valid:!1,error:"文件名不能为空"}}var lt={name:"FileDetailDialog",props:{modelValue:{type:Boolean,default:!1},file:{type:Object,default:null},fileLink:{type:String,default:""},urls:{type:Object,default:()=>({originUrl:"",mdUrl:"",htmlUrl:"",bbUrl:"",tgId:"",S3Location:"",S3CdnFileUrl:""})}},emits:["update:modelValue","download","tagManagement","block","white","delete","metadataUpdated","fileRenamed"],watch:{visible(e){e||(this.isEditing=!1,this.editSaving=!1)}},data(){return{activeTab:"originUrl",isEditing:!1,editForm:{FileName:"",FileType:""},editSaving:!1,showRenameDialog:!1,renameForm:{newFileId:""},renameValidation:{valid:!0,error:""},renameSaving:!1}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"95%":"900px"},descColumn(){return window.innerWidth<768?1:2},isVideo(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},uploadTime(){return this.file?.metadata?.TimeStamp?new Date(this.file.metadata.TimeStamp).toLocaleString():this.$t("fileDetail.unknown")},accessType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?this.$t("fileDetail.accessNormalWhitelist"):"Block"===e?this.$t("fileDetail.accessBlockedBlacklist"):"adult"===t?this.$t("fileDetail.accessBlockedReview"):this.$t("fileDetail.accessNormal")},accessTagType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?"success":"Block"===e||"adult"===t?"danger":"success"},imageDimensions(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;return!(!e||!t)||null},orientationIcon(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;if(!e||!t)return"";const a=e/t;return a>1.1?this.$t("fileDetail.orientationLandscape"):a<.9?this.$t("fileDetail.orientationPortrait"):this.$t("fileDetail.orientationSquare")},fileSizeDisplay(){const e=this.file?.metadata?.FileSizeBytes,t=this.file?.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(2)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:this.$t("fileDetail.unknown")}},methods:{handleVideoClick(e){const t=e.target;t.paused?t.play():t.pause()},handleTabClick(){},handleUrlClick(e){const t=e.target;t.select(),navigator.clipboard.writeText(t.value).then(()=>{ye.nk.success(this.$t("fileDetail.linkCopied"))})},openImageLink(){this.fileLink&&window.open(this.fileLink,"_blank")},startEdit(){this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.isEditing=!0},cancelEdit(){this.isEditing=!1,this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.editSaving=!1},async saveMetadata(){this.editSaving=!0;try{const e=this.file.name,t=await(0,D.A)(`/api/manage/metadata/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({FileName:this.editForm.FileName,FileType:this.editForm.FileType})});if(!t.ok){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.metadataSaveFailed"))}{const a=await t.json();ye.nk.success(this.$t("fileDetail.metadataSaved")),this.isEditing=!1,this.$emit("metadataUpdated",e,a.metadata)}}catch(e){console.error("Error saving metadata:",e),ye.nk.error(e.message||this.$t("fileDetail.metadataSaveFailed"))}finally{this.editSaving=!1}},openRenameDialog(){this.renameForm.newFileId=this.file?.name||"",this.renameValidation={valid:!0,error:""},this.showRenameDialog=!0},closeRenameDialog(){this.showRenameDialog=!1,this.renameForm.newFileId="",this.renameValidation={valid:!0,error:""}},validateRenameInput(){const e=ot(this.renameForm.newFileId,this.file?.name||"");this.renameValidation={valid:e.valid,error:e.error||""}},async submitRename(){if(!this.renameSaving&&(this.validateRenameInput(),this.renameValidation.valid)){this.renameSaving=!0;try{const e=this.file.name,t=await(0,D.A)(`/api/manage/rename/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newFileId:this.renameForm.newFileId})});if(t.ok){const a=await t.json();ye.nk.success(this.$t("fileDetail.renameSuccess")),this.showRenameDialog=!1,this.$emit("fileRenamed",e,this.renameForm.newFileId,a.metadata)}else{if(409!==t.status){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.renameFailed"))}this.renameValidation={valid:!1,error:this.$t("fileDetail.renameConflict")}}}catch(e){console.error("Error renaming file:",e),ye.nk.error(e.message||this.$t("fileDetail.renameFailed"))}finally{this.renameSaving=!1}}}}};const dt=(0,I.A)(lt,[["render",st],["__scopeId","data-v-550287cc"]]);var ct=dt,ht=a(78507);a(213);const ut={key:0,class:"batch-floating-bar"},ft={class:"batch-selection-summary"},mt={class:"batch-selection-count"},pt={class:"batch-floating-actions"};function gt(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=l.S2,d=ht.R7;return(0,c.uX)(),(0,c.Wv)(B.eB,{name:"batch-toolbar"},{default:(0,c.k6)(()=>[a.selectedCount>0?((0,c.uX)(),(0,c.CE)("div",ut,[(0,c.bF)(d,{disabled:s.disableTooltip,content:e.$t("dashboard.clearSelection"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:"batch-floating-btn ghost","aria-label":e.$t("dashboard.clearSelection"),onClick:s.handleClear},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"times",class:"batch-floating-icon"})]),_:1},8,["aria-label","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:s.disableTooltip,content:`${a.selectedCount} ${e.$t("dashboard.selectedItems")}`,placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ft,[(0,c.Lk)("span",mt,(0,h.v_)(a.selectedCount),1)])]),_:1},8,["disabled","content"]),t[0]||(t[0]=(0,c.Lk)("span",{class:"batch-toolbar-divider"},null,-1)),(0,c.Lk)("div",pt,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.actions,t=>((0,c.uX)(),(0,c.Wv)(d,{key:t.command,disabled:s.disableTooltip,content:e.$t(t.label),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:(0,h.C4)(["batch-floating-btn",t.className]),"aria-label":e.$t(t.label),onClick:e=>s.handleAction(t.command)},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:t.icon,class:"batch-floating-icon"},null,8,["icon"])]),_:2},1032,["class","aria-label","onClick"])]),_:2},1032,["disabled","content"]))),128))])])):(0,c.Q3)("",!0)]),_:1})}var bt={name:"BatchActionBar",props:{selectedCount:{type:Number,required:!0}},emits:["action","clear"],data(){return{actions:[{command:"copy",label:"dashboard.copy",icon:"copy",className:"copy"},{command:"download",label:"dashboard.download",icon:"download",className:"download"},{command:"move",label:"dashboard.move",icon:"file-export",className:"move"},{command:"tagManagement",label:"dashboard.tagManagement",icon:"tags",className:"tag"},{command:"ban",label:"dashboard.addToBlacklist",icon:"ban",className:"ban"},{command:"white",label:"dashboard.addToWhitelist",icon:"shield-alt",className:"white"},{command:"delete",label:"dashboard.delete",icon:"trash-alt",className:"danger"}]}},computed:{disableTooltip(){return window.innerWidth<768}},methods:{handleAction(e){this.$emit("action",e)},handleClear(){this.$emit("clear")}}};const vt=(0,I.A)(bt,[["render",gt],["__scopeId","data-v-49301bcc"]]);var kt=vt,yt=a(54880),wt=(a(4318),a(77815)),_t=(a(72907),a(98469));a(38736);const Ft={class:"list-col list-col-checkbox"},Ct=["src"],Tt=["src"],St=["title"],Lt={class:"filename-start"},$t={class:"filename-end"},xt={class:"list-col list-col-tags"},Et={key:1,class:"list-empty"},Dt={class:"list-col list-col-channel"},At={class:"list-col list-col-channel-name"},It={key:0,class:"channel-name-box"},zt={key:1,class:"list-empty"},Ut={class:"list-col list-col-address"},Bt={key:0,class:"address-box"},Pt={key:1,class:"list-empty"},Wt={class:"list-col list-col-size"},Rt={class:"list-col list-col-date"},Nt={class:"list-col list-col-actions"};function Ot(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7;return(0,c.uX)(),(0,c.CE)("div",{class:"list-item",onTouchstart:t[10]||(t[10]=t=>e.$emit("touchstart",t)),onTouchend:t[11]||(t[11]=t=>e.$emit("touchend",t)),onTouchmove:t[12]||(t[12]=t=>e.$emit("touchmove",t))},[(0,c.Lk)("div",Ft,[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onClick:t[1]||(t[1]=(0,B.D$)(()=>{},["stop"])),onChange:s.handleSelectChange},null,8,["modelValue","onChange"])]),(0,c.Lk)("div",{class:"list-col list-col-preview",onClick:t[2]||(t[2]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[s.isFolder?((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"folder-open",class:"list-folder-icon"})):s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:1,src:a.fileLink,class:"list-preview-img",muted:"",preload:"metadata"},null,8,Ct)):s.isImage?((0,c.uX)(),(0,c.CE)("img",{key:2,src:a.fileLink,class:"list-preview-img",loading:"lazy",decoding:"async"},null,8,Tt)):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"list-file-icon"}))]),(0,c.Lk)("div",{class:"list-col list-col-name",onClick:t[3]||(t[3]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[(0,c.Lk)("span",{class:"filename-ellipsis",title:s.displayName},[(0,c.Lk)("span",Lt,(0,h.v_)(s.fileNameStart),1),(0,c.Lk)("span",$t,(0,h.v_)(s.fileNameEnd),1)],8,St)]),(0,c.Lk)("div",xt,[!s.isFolder&&a.item.metadata?.Tags&&a.item.metadata.Tags.length>0?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.item.metadata.Tags.slice(0,3),(e,t)=>((0,c.uX)(),(0,c.CE)("span",{key:t,class:"color-tag",style:(0,h.Tr)({background:s.getTagColor(t)})},(0,h.v_)(e),5))),128)),a.item.metadata.Tags.length>3?((0,c.uX)(),(0,c.CE)("span",{key:0,class:"color-tag color-tag-more",style:(0,h.Tr)({background:s.getTagColor(3)})},"+"+(0,h.v_)(a.item.metadata.Tags.length-3),5)):(0,c.Q3)("",!0)],64)):((0,c.uX)(),(0,c.CE)("span",Et,"-"))]),(0,c.Lk)("div",Dt,(0,h.v_)(s.isFolder?"-":a.item.metadata?.Channel||a.item.channelTag||"-"),1),(0,c.Lk)("div",At,[!s.isFolder&&a.item.metadata?.ChannelName?((0,c.uX)(),(0,c.CE)("div",It,(0,h.v_)(a.item.metadata.ChannelName),1)):((0,c.uX)(),(0,c.CE)("span",zt,"-"))]),(0,c.Lk)("div",Ut,[!s.isFolder&&a.item.metadata?.UploadIP?((0,c.uX)(),(0,c.CE)("div",Bt,(0,h.v_)(a.item.metadata.UploadIP),1)):((0,c.uX)(),(0,c.CE)("span",Pt,"-"))]),(0,c.Lk)("div",Wt,(0,h.v_)(s.isFolder?"-":s.fileSizeDisplay),1),(0,c.Lk)("div",Rt,(0,h.v_)(s.uploadDate),1),(0,c.Lk)("div",Nt,[s.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.bF)(l,{content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[7]||(t[7]=(0,B.D$)(t=>e.$emit("folderCopy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[8]||(t[8]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["content"])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.bF)(l,{content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.downloadFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["content"]),(0,c.bF)(l,{content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[6]||(t[6]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["content"])],64)),(0,c.bF)(l,{content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn list-action-danger",onClick:t[9]||(t[9]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["content"])])],32)}var Mt={name:"FileListItem",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,default:""}},emits:["update:selected","enter","detail","copy","folderCopy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,tagColors:["#f472b6","#a78bfa","#60a5fa","#34d399"]}},computed:{isFolder(){return this.item.isFolder||this.item.name?.endsWith("/")},isVideo(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".mp4")||e.endsWith(".webm")||e.endsWith(".mov")||e.endsWith(".avi")},isImage(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".jpg")||e.endsWith(".jpeg")||e.endsWith(".png")||e.endsWith(".gif")||e.endsWith(".webp")||e.endsWith(".svg")||e.endsWith(".bmp")},displayName(){if(this.isFolder){const e=this.item.name.split("/").filter(Boolean);return e[e.length-1]||this.item.name}return this.item.metadata?.FileName||this.getFileName(this.item.name)},fileNameStart(){const e=this.displayName;return e.length<=20?e:e.slice(0,-8)},fileNameEnd(){const e=this.displayName;return e.length<=20?"":e.slice(-8)},uploadDate(){return this.item.uploaded?new Date(this.item.uploaded).toLocaleDateString():this.item.metadata?.TimeStamp?new Date(this.item.metadata.TimeStamp).toLocaleDateString():"-"},fileSizeDisplay(){const e=this.item.metadata?.FileSizeBytes,t=this.item.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:"-"}},watch:{selected(e){this.localSelected=e}},methods:{handleSelectChange(e){this.localSelected=e,this.$emit("update:selected",e)},handlePreviewClick(){this.isFolder?this.$emit("enter"):this.$emit("detail")},getFileName(e){const t=(e||"").split("/");return t[t.length-1]},getTagColor(e){return this.tagColors[e%this.tagColors.length]}}};const Vt=(0,I.A)(Mt,[["render",Ot],["__scopeId","data-v-25a3242c"]]);var Xt=Vt,jt=a(70683);a(95385);const Kt={class:"file-short-info"},Zt={key:0,class:"success-tag"},Ht={key:1,class:"fail-tag"},Gt={key:2,class:"success-tag"},qt={key:3,class:"primary-tag"},Qt={key:0,style:{"margin-left":"2px"}},Yt={key:0,class:"skeleton-wrapper"},Jt={class:"error-text"},ea=["src"],ta={class:"error-text"},aa={key:3,class:"file-preview"},ia={class:"card-bottom-overlay"},na={class:"file-name-row"},sa={class:"file-name"},ra={class:"action-bar"},oa={class:"action-bar-left"},la={class:"action-bar-right"};function da(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=Ze.Zq,d=ht.R7,u=jt.Ik;return(0,c.uX)(),(0,c.Wv)(u,{class:"img-card",onTouchstart:t[17]||(t[17]=t=>e.$emit("touchstart",t)),onTouchend:t[18]||(t[18]=t=>e.$emit("touchend",t)),onTouchmove:t[19]||(t[19]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",Kt,["White"===a.item.metadata?.ListType?((0,c.uX)(),(0,c.CE)("div",Zt,(0,h.v_)(s.channelTag),1)):"Block"===a.item.metadata?.ListType||"adult"===a.item.metadata?.Label?((0,c.uX)(),(0,c.CE)("div",Ht,(0,h.v_)(s.channelTag),1)):((0,c.uX)(),(0,c.CE)("div",Gt,(0,h.v_)(s.channelTag),1)),a.item.metadata?.Tags&&a.item.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",qt,[(0,c.bF)(o,{icon:"tag",style:{"margin-right":"3px","font-size":"12px"}}),(0,c.eW)(" "+(0,h.v_)(a.item.metadata.Tags[0])+" ",1),a.item.metadata.Tags.length>1?((0,c.uX)(),(0,c.CE)("span",Qt," (+"+(0,h.v_)(a.item.metadata.Tags.length-1)+") ",1)):(0,c.Q3)("",!0)])):(0,c.Q3)("",!0)]),s.isVideo?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[n.videoLoading?((0,c.uX)(),(0,c.CE)("div",Yt)):n.videoError?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"error-wrapper",onClick:t[2]||(t[2]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"exclamation-triangle",class:"error-icon"}),(0,c.Lk)("span",Jt,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])):(0,c.Q3)("",!0),(0,c.bo)((0,c.Lk)("video",{src:a.fileLink,muted:"",loop:"",preload:"metadata",class:"video-preview",onClick:t[3]||(t[3]=(...e)=>s.handleVideoClick&&s.handleVideoClick(...e)),onMouseenter:t[4]||(t[4]=e=>s.handleVideoHover(e,!0)),onMouseleave:t[5]||(t[5]=e=>s.handleVideoHover(e,!1)),onFullscreenchange:t[6]||(t[6]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onWebkitfullscreenchange:t[7]||(t[7]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onLoadeddata:t[8]||(t[8]=e=>n.videoLoading=!1),onError:t[9]||(t[9]=(...e)=>s.handleVideoError&&s.handleVideoError(...e))},null,40,ea),[[B.aG,!n.videoLoading&&!n.videoError]])],64)):s.isAudio?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"file-preview audio-card-preview",onClick:t[10]||(t[10]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"music",class:"file-icon audio-icon"})])):s.isImage?((0,c.uX)(),(0,c.Wv)(l,{key:2,"preview-teleported":!0,src:a.fileLink,"preview-src-list":a.previewSrcList,fit:"cover",lazy:"",decoding:"async",class:"image-preview"},{placeholder:(0,c.k6)(()=>[...t[20]||(t[20]=[(0,c.Lk)("div",{class:"skeleton-wrapper"},null,-1)])]),error:(0,c.k6)(()=>[(0,c.Lk)("div",{class:"error-wrapper",onClick:t[11]||(t[11]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"image",class:"error-icon"}),(0,c.Lk)("span",ta,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])]),_:1},8,["src","preview-src-list"])):((0,c.uX)(),(0,c.CE)("div",aa,[(0,c.bF)(o,{icon:"file",class:"file-icon"})])),(0,c.Lk)("div",ia,[(0,c.Lk)("div",na,[(0,c.Lk)("span",sa,(0,h.v_)(s.displayName),1)]),(0,c.Lk)("div",ra,[(0,c.Lk)("div",oa,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.detail"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[12]||(t[12]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"info-circle"})])]),_:1},8,["disabled","content"])]),(0,c.Lk)("div",la,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[13]||(t[13]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[14]||(t[14]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.downloadFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[15]||(t[15]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[16]||(t[16]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"])])])])]),_:1})}var ca={name:"FileCard",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,required:!0},previewSrcList:{type:Array,default:()=>[]},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","detail","copy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,videoLoading:!0,videoError:!1}},computed:{channelTag(){return this.item.channelTag||""},isVideo(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},displayName(){const e=this.item.metadata?.FileName||this.item.name||"",t=e.split("/");return t[t.length-1]}},watch:{selected(e){this.localSelected=e},fileLink(){this.videoLoading=!0,this.videoError=!1}},methods:{handleVideoError(){this.videoLoading=!1,this.videoError=!0},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleFullscreenChange(e){const t=e.target,a=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;a?(t.muted=!1,t.loop=!1):(t.muted=!0,t.loop=!0,t.pause(),t.currentTime=0)},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)}}};const ha=(0,I.A)(ca,[["render",da],["__scopeId","data-v-956fb02e"]]);var ua=ha;const fa={class:"card-bottom-overlay"},ma={class:"file-name-row"},pa={class:"file-name"},ga={key:0,class:"action-bar"},ba={class:"action-bar-right"};function va(e,t,a,i,n,s){const r=_t.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7,d=jt.Ik;return(0,c.uX)(),(0,c.Wv)(d,{class:"img-card folder-card",onTouchstart:t[6]||(t[6]=t=>e.$emit("touchstart",t)),onTouchend:t[7]||(t[7]=t=>e.$emit("touchend",t)),onTouchmove:t[8]||(t[8]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",{class:"folder-icon",onClick:t[2]||(t[2]=t=>e.$emit("enter"))},[(0,c.bF)(o,{icon:"folder-open",class:"folder-icon-svg"})]),(0,c.Lk)("div",fa,[(0,c.Lk)("div",ma,[(0,c.Lk)("span",pa,(0,h.v_)(s.folderName),1)]),a.showActions?((0,c.uX)(),(0,c.CE)("div",ga,[t[9]||(t[9]=(0,c.Lk)("div",{class:"action-bar-left"},null,-1)),(0,c.Lk)("div",ba,[(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"])])])):(0,c.Q3)("",!0)])]),_:1})}var ka={name:"FolderCard",props:{name:{type:String,required:!0},selected:{type:Boolean,default:!1},showActions:{type:Boolean,default:!0},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","enter","copy","move","delete","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected}},computed:{folderName(){const e=this.name.split("/").filter(Boolean);return e[e.length-1]||this.name}},watch:{selected(e){this.localSelected=e}}};const ya=(0,I.A)(ka,[["render",va],["__scopeId","data-v-534cf01b"]]);var wa=ya;function _a(e,t,a,i,n,s){return"card"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:0},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"skeleton-"+e,class:"skeleton-card"},[...t[0]||(t[0]=[(0,c.Lk)("div",{class:"skeleton-image"},null,-1),(0,c.Lk)("div",{class:"skeleton-info"},[(0,c.Lk)("div",{class:"skeleton-text"})],-1)])]))),128)):"list"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:1},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"list-skeleton-"+e,class:"list-item skeleton-list-item"},[...t[1]||(t[1]=[(0,c.Fv)('

',10)])]))),128)):(0,c.Q3)("",!0)}var Fa={name:"SkeletonLoader",props:{type:{type:String,default:"card",validator:e=>["card","list"].includes(e)},count:{type:Number,default:15}}};const Ca=(0,I.A)(Fa,[["render",_a],["__scopeId","data-v-070880ec"]]);var Ta=Ca,Sa=a(81095),La=a(62086),$a=(a(40670),a(88830),a(23597),a(58165));a(34396),a(3261);const xa=["aria-checked"];function Ea(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.CE)("span",{class:(0,h.C4)(["dashboard-checkbox",[`dashboard-checkbox--${a.variant}`,{checked:a.checked,indeterminate:a.indeterminate&&!a.checked}]]),role:"checkbox","aria-checked":s.ariaChecked,tabindex:"0",onClick:t[0]||(t[0]=(...e)=>s.handleClick&&s.handleClick(...e)),onKeydown:[t[1]||(t[1]=(0,B.jR)((0,B.D$)((...e)=>s.handleClick&&s.handleClick(...e),["prevent"]),["enter"])),t[2]||(t[2]=(0,B.jR)((0,B.D$)((...e)=>s.handleClick&&s.handleClick(...e),["prevent"]),["space"]))]},[(0,c.bF)(r,{icon:s.markIcon,class:"dashboard-checkbox-mark"},null,8,["icon"])],42,xa)}var Da={name:"DashboardCheckbox",props:{checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},variant:{type:String,default:"breadcrumb",validator:e=>["breadcrumb"].includes(e)}},emits:["click"],computed:{ariaChecked(){return this.checked?"true":this.indeterminate?"mixed":"false"},markIcon(){return this.indeterminate&&!this.checked?"minus":"check"}},methods:{handleClick(e){this.$emit("click",e)}}};const Aa=(0,I.A)(Da,[["render",Ea],["__scopeId","data-v-3757bfa7"]]);var Ia=Aa,za=(a(77128),a(49187),a(77788));a(72099);const Ua={class:"el-dropdown-link filter-trigger"},Ba={class:"filter-section"},Pa={class:"filter-title"},Wa={class:"filter-options"},Ra={class:"filter-section"},Na={class:"filter-title"},Oa={class:"filter-options"},Ma={class:"filter-section"},Va={class:"filter-title"},Xa={class:"filter-options"},ja={class:"filter-section"},Ka={class:"filter-title"},Za={class:"filter-options"},Ha={class:"filter-section"},Ga={class:"filter-title"},qa={class:"filter-options"},Qa={key:0,class:"filter-section"},Ya={class:"filter-title"},Ja={class:"filter-options"},ei={key:0,class:"channel-divider"},ti={class:"channel-group-title"},ai={class:"filter-actions"};function ii(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=za.z_,d=_t.dI,u=_t.o5,f=l.S2,m=La.Iy,p=La.dW;return(0,c.uX)(),(0,c.Wv)(p,{"hide-on-click":!1,trigger:"click",class:"filter-dropdown",ref:"dropdownRef"},{dropdown:(0,c.k6)(()=>[(0,c.bF)(m,{class:"filter-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ba,[(0,c.Lk)("div",Pa,(0,h.v_)(e.$t("filter.accessStatus")),1),(0,c.Lk)("div",Wa,[(0,c.bF)(u,{modelValue:n.localFilters.accessStatus,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localFilters.accessStatus=e),onChange:t[1]||(t[1]=e=>s.handleFilterChange("accessStatus"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.accessStatusOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"accessStatus-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ra,[(0,c.Lk)("div",Na,(0,h.v_)(e.$t("filter.blackWhiteList")),1),(0,c.Lk)("div",Oa,[(0,c.bF)(u,{modelValue:n.localFilters.listType,"onUpdate:modelValue":t[2]||(t[2]=e=>n.localFilters.listType=e),onChange:t[3]||(t[3]=e=>s.handleFilterChange("listType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.listTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"listType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ma,[(0,c.Lk)("div",Va,(0,h.v_)(e.$t("filter.reviewResult")),1),(0,c.Lk)("div",Xa,[(0,c.bF)(u,{modelValue:n.localFilters.label,"onUpdate:modelValue":t[4]||(t[4]=e=>n.localFilters.label=e),onChange:t[5]||(t[5]=e=>s.handleFilterChange("label"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.labelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"label-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",ja,[(0,c.Lk)("div",Ka,(0,h.v_)(e.$t("filter.fileType")),1),(0,c.Lk)("div",Za,[(0,c.bF)(u,{modelValue:n.localFilters.fileType,"onUpdate:modelValue":t[6]||(t[6]=e=>n.localFilters.fileType=e),onChange:t[7]||(t[7]=e=>s.handleFilterChange("fileType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.fileTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"fileType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ha,[(0,c.Lk)("div",Ga,(0,h.v_)(e.$t("filter.channelType")),1),(0,c.Lk)("div",qa,[(0,c.bF)(u,{modelValue:n.localFilters.channel,"onUpdate:modelValue":t[8]||(t[8]=e=>n.localFilters.channel=e),onChange:t[9]||(t[9]=e=>s.handleFilterChange("channel"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.channelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channel-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),a.channelNameOptions.length>0?((0,c.uX)(),(0,c.CE)("div",Qa,[(0,c.Lk)("div",Ya,(0,h.v_)(e.$t("filter.channelName")),1),(0,c.Lk)("div",Ja,[(0,c.bF)(u,{modelValue:n.localFilters.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>n.localFilters.channelName=e),onChange:t[11]||(t[11]=e=>s.handleFilterChange("channelName"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.groupedChannelNames,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:"group-"+e.type},[t>0?((0,c.uX)(),(0,c.CE)("div",ei)):(0,c.Q3)("",!0),(0,c.Lk)("div",ti,(0,h.v_)(e.typeLabel),1),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(e.channels,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channelName-"+e.type+"-"+e.name,label:e.type+":"+e.name},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.name),1)]),_:2},1032,["label"]))),128))],64))),128))]),_:1},8,["modelValue"])])])):(0,c.Q3)("",!0),(0,c.Lk)("div",ai,[(0,c.bF)(f,{size:"small",onClick:s.clearFilters,disabled:0===s.activeFilterCount},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("filter.clearFilters")),1)]),_:1},8,["onClick","disabled"])])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",Ua,[(0,c.bF)(o,{value:s.activeFilterCount,hidden:0===s.activeFilterCount,class:"filter-badge"},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"filter",class:"header-icon"})]),_:1},8,["value","hidden"])])]),_:1},512)}a(7588),a(18237);var ni={name:"FilterDropdown",props:{filters:{type:Object,default:()=>({accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]})},channelNameOptions:{type:Array,default:()=>[]}},emits:["update:filters","change"],data(){return{localFilters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]}}},computed:{accessStatusOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.blocked"),value:"blocked"}]},listTypeOptions(){return[{label:this.$t("filter.whiteList"),value:"White"},{label:this.$t("filter.blackList"),value:"Block"},{label:this.$t("filter.notSet"),value:"None"}]},labelOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.teenContent"),value:"teen"},{label:this.$t("filter.adultContent"),value:"adult"}]},fileTypeOptions(){return[{label:this.$t("filter.image"),value:"image"},{label:this.$t("filter.video"),value:"video"},{label:this.$t("filter.audio"),value:"audio"},{label:this.$t("filter.other"),value:"other"}]},channelOptions(){return[{label:"Telegram",value:"TelegramNew"},{label:"Cloudflare R2",value:"CloudflareR2"},{label:"S3",value:"S3"},{label:"Discord",value:"Discord"},{label:"HuggingFace",value:"HuggingFace"},{label:"WebDAV",value:"WebDAV"},{label:this.$t("filter.externalLink"),value:"External"}]},activeFilterCount(){return Object.values(this.localFilters).reduce((e,t)=>e+t.length,0)},groupedChannelNames(){const e={};return this.channelNameOptions.forEach(t=>{e[t.type]||(e[t.type]={type:t.type,typeLabel:t.typeLabel,channels:[]}),e[t.type].channels.push(t)}),Object.values(e)}},watch:{filters:{handler(e){this.localFilters={accessStatus:Array.isArray(e.accessStatus)?[...e.accessStatus]:[],listType:Array.isArray(e.listType)?[...e.listType]:[],label:Array.isArray(e.label)?[...e.label]:[],fileType:Array.isArray(e.fileType)?[...e.fileType]:[],channel:Array.isArray(e.channel)?[...e.channel]:[],channelName:Array.isArray(e.channelName)?[...e.channelName]:[]}},immediate:!0,deep:!0}},methods:{handleFilterChange(e){this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:e,filters:{...this.localFilters}})},clearFilters(){this.localFilters={accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:"clear",filters:{...this.localFilters}})}}};const si=(0,I.A)(ni,[["render",ii],["__scopeId","data-v-42919522"]]);var ri=si,oi=a(20620);const li={class:"container"},di={class:"header-content admin-header-content"},ci={class:"search-area"},hi={class:"search-card"},ui={class:"actions"},fi={class:"el-dropdown-link"},mi={class:"breadcrumb-container"},pi=["title","aria-pressed"],gi=["title","aria-pressed"],bi=["title"],vi={class:"breadcrumb-sort-icon",viewBox:"0 0 30 18","aria-hidden":"true"},ki={key:0,class:"sort-field-glyph"},yi={key:1,class:"sort-field-glyph"},wi={key:2,class:"sort-field-glyph"},_i={key:3,class:"sort-field-glyph"},Fi={key:4,class:"sort-order-glyph",d:"M23 13.5V4.5M19 8.5L23 4.5L27 8.5"},Ci={key:5,class:"sort-order-glyph",d:"M23 4.5V13.5M19 9.5L23 13.5L27 9.5"},Ti={class:"sort-order-wrapper"},Si={class:"mobile-directory-path"},Li={class:"breadcrumb desktop-only"},$i=["title"],xi={key:1,class:"empty-state"},Ei={class:"empty-text"},Di={class:"empty-hint"},Ai={class:"list-header"},Ii={class:"list-col list-col-checkbox"},zi={class:"list-col list-col-preview"},Ui={class:"list-col list-col-name"},Bi={class:"list-col list-col-tags"},Pi={class:"list-col list-col-channel"},Wi={class:"list-col list-col-channel-name"},Ri={class:"list-col list-col-address"},Ni={class:"list-col list-col-size"},Oi={class:"list-col list-col-date"},Mi={class:"list-col list-col-actions"},Vi={key:1,class:"empty-state list-empty"},Xi={class:"empty-text"},ji={class:"empty-hint"},Ki={class:"pagination-container"},Zi={class:"pagination-center"},Hi={class:"pagination-right"},Gi={class:"page-total"},qi={class:"page-jump"},Qi={class:"dialog-section"},Yi={class:"section-header"},Ji={class:"section-title"},en={class:"section-content"},tn={class:"dialog-section"},an={class:"section-header"},nn={class:"section-title"},sn={class:"section-content"},rn={class:"setting-item"},on={class:"setting-label"},ln={key:0,class:"setting-item"},dn={class:"setting-label"},cn={class:"dialog-action"};function hn(e,t,a,i,n,s){const o=oi.A,u=(0,c.g2)("font-awesome-icon"),f=d.WK,m=ri,p=ht.R7,g=yt.bZ,b=Ia,v=Xe.Zh,k=Xe.MQ,y=$a.fR,w=La.c6,_=La.Iy,F=La.dW,C=Sa.WZ,T=Sa.vp,S=Ta,L=wa,$=ua,x=_t.dI,E=Xt,D=wt.aQ,A=l.S2,I=yt.ZO,z=yt.lX,P=kt,W=ct,R=Xe.ll,N=Ve.qi,O=r.kZ,M=Me,V=Ce,j=Q,K=X,Z=U;return(0,c.uX)(),(0,c.CE)("div",li,[(0,c.bF)(z,null,{default:(0,c.k6)(()=>[(0,c.bF)(g,null,{default:(0,c.k6)(()=>[(0,c.Lk)("div",di,[(0,c.bF)(o,{activeTab:"dashboard"}),(0,c.Lk)("div",ci,[(0,c.Lk)("div",hi,[(0,c.bF)(f,{modelValue:n.tempSearch,"onUpdate:modelValue":t[0]||(t[0]=e=>n.tempSearch=e),size:"small",placeholder:e.$t("dashboard.searchPlaceholder"),onKeyup:(0,B.jR)(s.handleSearch,["enter"])},{suffix:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"search",class:"search-icon",onClick:s.handleSearch},null,8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup"])]),(0,c.bF)(m,{filters:n.filters,"onUpdate:filters":t[1]||(t[1]=e=>n.filters=e),channelNameOptions:n.channelNameOptions,onChange:s.handleFilterChange},null,8,["filters","channelNameOptions","onChange"])]),(0,c.Lk)("div",ui,[(0,c.bF)(p,{disabled:s.disableTooltip,content:e.$t("dashboard.linkFormat"),placement:"bottom","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.Lk)("span",fi,[(0,c.bF)(u,{icon:"link",class:"header-icon",onClick:t[2]||(t[2]=e=>n.showUrlDialog=!0)})])]),_:1},8,["disabled","content"]),(0,c.bF)(p,{disabled:s.disableTooltip,content:e.$t("dashboard.logout"),placement:"bottom","show-after":1e3},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sign-out-alt",class:"header-icon",onClick:s.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,c.bF)(I,{class:(0,h.C4)(["main-container",{"has-batch-toolbar":n.selectedFiles.length>0}])},{default:(0,c.k6)(()=>[(0,c.Lk)("div",mi,[(0,c.bF)(b,{checked:s.selectPage,indeterminate:s.selectedPageFiles&&!s.selectPage,variant:"breadcrumb",onClick:s.handleSelectPage},null,8,["checked","indeterminate","onClick"]),(0,c.Lk)("div",{class:(0,h.C4)(["breadcrumb-view-toggle",{"is-list":"list"===n.viewMode}]),role:"group"},[(0,c.Lk)("button",{class:(0,h.C4)(["breadcrumb-view-button",{"is-active":"card"===n.viewMode}]),type:"button",title:e.$t("dashboard.cardView"),"aria-pressed":"card"===n.viewMode,onClick:t[3]||(t[3]=e=>s.setViewMode("card"))},[(0,c.bF)(u,{icon:"th-large",class:"breadcrumb-view-icon"})],10,pi),(0,c.Lk)("button",{class:(0,h.C4)(["breadcrumb-view-button",{"is-active":"list"===n.viewMode}]),type:"button",title:e.$t("dashboard.listView"),"aria-pressed":"list"===n.viewMode,onClick:t[4]||(t[4]=e=>s.setViewMode("list"))},[(0,c.bF)(u,{icon:"list",class:"breadcrumb-view-icon"})],10,gi)],2),(0,c.bF)(F,{trigger:"click",class:"breadcrumb-sort-dropdown",onCommand:s.setSortField},{dropdown:(0,c.k6)(()=>[(0,c.bF)(_,{class:"sort-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ti,[(0,c.bF)(k,{modelValue:n.sortOrder,"onUpdate:modelValue":t[5]||(t[5]=e=>n.sortOrder=e),size:"small",onChange:s.setSortOrder},{default:(0,c.k6)(()=>[(0,c.bF)(v,{label:"asc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortAsc")),1)]),_:1}),(0,c.bF)(v,{label:"desc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortDesc")),1)]),_:1})]),_:1},8,["modelValue","onChange"])]),(0,c.bF)(y,{class:"sort-divider"}),(0,c.bF)(w,{command:"time",class:(0,h.C4)({"is-selected":"time"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByTime")),1),"time"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"size",class:(0,h.C4)({"is-selected":"size"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortBySize")),1),"size"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"rawName",class:(0,h.C4)({"is-selected":"rawName"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByRawName")),1),"rawName"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"]),(0,c.bF)(w,{command:"fileName",class:(0,h.C4)({"is-selected":"fileName"===n.sortField})},{default:(0,c.k6)(()=>[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.sortByFileName")),1),"fileName"===n.sortField?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"sort-field-check"})):(0,c.Q3)("",!0)]),_:1},8,["class"])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"breadcrumb-sort-button",type:"button",title:s.sortLabel},[((0,c.uX)(),(0,c.CE)("svg",vi,["time"===n.sortField?((0,c.uX)(),(0,c.CE)("g",ki,[...t[32]||(t[32]=[(0,c.Lk)("circle",{cx:"7.5",cy:"9",r:"5.5"},null,-1),(0,c.Lk)("path",{d:"M7.5 5.5V9L10 10.5"},null,-1)])])):"size"===n.sortField?((0,c.uX)(),(0,c.CE)("g",yi,[...t[33]||(t[33]=[(0,c.Lk)("path",{d:"M2 4H13M2 9H10M2 14H7"},null,-1)])])):"rawName"===n.sortField?((0,c.uX)(),(0,c.CE)("g",wi,[...t[34]||(t[34]=[(0,c.Lk)("path",{d:"M5.5 3L4 15M11 3L9.5 15M2.5 7H13M2 11H12.5"},null,-1)])])):((0,c.uX)(),(0,c.CE)("g",_i,[...t[35]||(t[35]=[(0,c.Lk)("path",{d:"M2.5 14L7.5 3L12.5 14M4.3 10H10.7"},null,-1)])])),"asc"===n.sortOrder?((0,c.uX)(),(0,c.CE)("path",Fi)):((0,c.uX)(),(0,c.CE)("path",Ci))]))],8,bi)]),_:1},8,["onCommand"]),(0,c.Lk)("div",{class:"mobile-directory-trigger",onClick:t[6]||(t[6]=e=>n.showMobileDirectoryDrawer=!0)},[(0,c.bF)(u,{icon:"folder-open",class:"mobile-directory-icon"}),(0,c.Lk)("span",Si,(0,h.v_)(n.currentPath&&n.currentPath.split("/").filter(Boolean).length>0?n.currentPath.split("/").filter(Boolean).pop():e.$t("dashboard.rootDirectory")),1),(0,c.bF)(u,{icon:"chevron-down",class:"mobile-directory-arrow"})]),(0,c.Lk)("div",Li,[(0,c.bF)(T,{separator:"/"},{default:(0,c.k6)(()=>[(0,c.bF)(C,{onClick:t[7]||(t[7]=e=>s.navigateToFolder(""))},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"home",class:"breadcrumb-home-icon"})]),_:1}),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentPath.split("/").filter(Boolean),(e,t)=>((0,c.uX)(),(0,c.Wv)(C,{key:t,onClick:e=>s.navigateToFolder(n.currentPath.split("/").filter(Boolean).slice(0,t+1).join("/"))},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),(0,c.Lk)("span",{class:"stats-badge",title:e.$t("dashboard.totalFiles",{count:e.$data.Number})},[(0,c.bF)(u,{icon:"database",class:"stats-badge-icon"}),(0,c.eW)(" "+(0,h.v_)(n.Number),1)],8,$i)]),"card"===n.viewMode?((0,c.uX)(),(0,c.CE)("div",{key:0,class:(0,h.C4)(["content",{"is-drag-selecting":i.isDragging}]),ref:"cardContainerRef",onTouchstartPassive:t[8]||(t[8]=(...e)=>s.handlePageSwipeStart&&s.handlePageSwipeStart(...e)),onTouchendPassive:t[9]||(t[9]=(...e)=>s.handlePageSwipeEnd&&s.handlePageSwipeEnd(...e)),onTouchcancelPassive:t[10]||(t[10]=(...e)=>s.resetPageSwipe&&s.resetPageSwipe(...e))},[n.loading?((0,c.uX)(),(0,c.Wv)(S,{key:0,type:"card",count:n.pageSize},null,8,["count"])):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",xi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Ei,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",Di,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:t},[s.isFolder(e)?((0,c.uX)(),(0,c.Wv)(L,{key:0,name:e.name,selected:e.selected,"onUpdate:selected":t=>e.selected=t,showActions:!n.isSearchMode,disableTooltip:s.disableTooltip,onEnter:t=>s.enterFolder(e.name),onCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onTouchstart:a=>s.handleFolderTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["name","selected","onUpdate:selected","showActions","disableTooltip","onEnter","onCopy","onMove","onDelete","onTouchstart","onTouchend","onTouchmove"])):((0,c.uX)(),(0,c.Wv)($,{key:1,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),previewSrcList:e.previewSrcList,disableTooltip:s.disableTooltip,onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","previewSrcList","disableTooltip","onDetail","onCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))],64))),128))],34)):((0,c.uX)(),(0,c.CE)("div",{key:1,class:(0,h.C4)(["list-view",{"is-drag-selecting":i.isDragging}]),ref:"listContainerRef",onTouchstartPassive:t[12]||(t[12]=(...e)=>s.handlePageSwipeStart&&s.handlePageSwipeStart(...e)),onTouchendPassive:t[13]||(t[13]=(...e)=>s.handlePageSwipeEnd&&s.handlePageSwipeEnd(...e)),onTouchcancelPassive:t[14]||(t[14]=(...e)=>s.resetPageSwipe&&s.resetPageSwipe(...e))},[(0,c.Lk)("div",Ai,[(0,c.Lk)("div",Ii,[(0,c.bF)(x,{"model-value":s.isSelectAll,indeterminate:s.isIndeterminate,onClick:t[11]||(t[11]=(0,B.D$)(()=>{},["stop"])),onChange:s.handleSelectAllPage},null,8,["model-value","indeterminate","onChange"])]),(0,c.Lk)("div",zi,(0,h.v_)(e.$t("dashboard.preview")),1),(0,c.Lk)("div",Ui,(0,h.v_)(e.$t("dashboard.fileName")),1),(0,c.Lk)("div",Bi,(0,h.v_)(e.$t("dashboard.tags")),1),(0,c.Lk)("div",Pi,(0,h.v_)(e.$t("dashboard.channelType")),1),(0,c.Lk)("div",Wi,(0,h.v_)(e.$t("dashboard.channelNameCol")),1),(0,c.Lk)("div",Ri,(0,h.v_)(e.$t("dashboard.uploadAddress")),1),(0,c.Lk)("div",Ni,(0,h.v_)(e.$t("dashboard.fileSize")),1),(0,c.Lk)("div",Oi,(0,h.v_)(e.$t("dashboard.uploadTime")),1),(0,c.Lk)("div",Mi,(0,h.v_)(e.$t("dashboard.actions")),1)]),n.loading?((0,c.uX)(),(0,c.Wv)(S,{key:0,type:"list",count:n.pageSize},null,8,["count"])):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",Vi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Xi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",ji,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.Wv)(E,{key:t,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),onEnter:t=>s.enterFolder(e.name),onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onFolderCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.isFolder(e)?s.handleFolderTouchStart(e,t):s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","onEnter","onDetail","onCopy","onFolderCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))),128))],34)),i.isDragging?((0,c.uX)(),(0,c.CE)("div",{key:2,class:"drag-select-overlay",style:(0,h.Tr)({position:"fixed",left:i.selectionRect.left+"px",top:i.selectionRect.top+"px",width:i.selectionRect.width+"px",height:i.selectionRect.height+"px"})},null,4)):(0,c.Q3)("",!0),(0,c.Lk)("div",Ki,[(0,c.Lk)("div",Zi,[(0,c.bF)(D,{background:"",layout:"prev, pager, next",total:s.filteredTableData.length,"page-size":n.pageSize,"current-page":n.currentPage,"pager-count":s.pagerCount,onCurrentChange:s.handlePageChange},null,8,["total","page-size","current-page","pager-count","onCurrentChange"]),(0,c.bF)(A,{type:"primary",onClick:s.refreshFileList,class:"refresh-btn"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sync",class:(0,h.C4)({"fa-spin":n.refreshLoading})},null,8,["class"])]),_:1},8,["onClick"]),n.currentPage===Math.ceil(s.filteredTableData.length/n.pageSize)?((0,c.uX)(),(0,c.Wv)(A,{key:0,type:"primary",onClick:s.loadMoreData,loading:n.loading,class:"load-more"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Hi,[(0,c.Lk)("span",Gi,(0,h.v_)(e.$t("dashboard.totalPages",{count:s.realTotalPages})),1),(0,c.Lk)("div",qi,[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.jumpTo")),1),(0,c.bF)(f,{modelValue:n.jumpPage,"onUpdate:modelValue":t[15]||(t[15]=e=>n.jumpPage=e),size:"small",class:"jump-input",onKeyup:(0,B.jR)(s.handleJumpPage,["enter"])},null,8,["modelValue","onKeyup"]),(0,c.bF)(A,{size:"small",type:"primary",onClick:s.handleJumpPage,class:"jump-btn"},{default:(0,c.k6)(()=>[...t[36]||(t[36]=[(0,c.eW)("GO",-1)])]),_:1},8,["onClick"])])])])]),_:1},8,["class"])]),_:1}),(0,c.bF)(P,{"selected-count":n.selectedFiles.length,onAction:s.handleBatchAction,onClear:s.clearSelection},null,8,["selected-count","onAction","onClear"]),(0,c.bF)(W,{modelValue:n.showdetailDialog,"onUpdate:modelValue":t[16]||(t[16]=e=>n.showdetailDialog=e),file:n.detailFile,fileLink:s.getFileLink(n.detailFile?.name),urls:s.allUrl,onDownload:t[17]||(t[17]=e=>s.handleDownload(n.detailFile?.name)),onTagManagement:t[18]||(t[18]=e=>s.handleTagManagement(n.detailFile?.name)),onBlock:t[19]||(t[19]=e=>s.handleBlock(n.detailFile?.name)),onWhite:t[20]||(t[20]=e=>s.handleWhite(n.detailFile?.name)),onDelete:t[21]||(t[21]=e=>s.handleDetailDelete(n.detailFile?.name)),onMetadataUpdated:s.handleMetadataUpdated,onFileRenamed:s.handleFileRenamed},null,8,["modelValue","file","fileLink","urls","onMetadataUpdated","onFileRenamed"]),(0,c.bF)(O,{title:e.$t("dashboard.linkFormat"),modelValue:n.showUrlDialog,"onUpdate:modelValue":t[26]||(t[26]=e=>n.showUrlDialog=e),width:s.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Qi,[(0,c.Lk)("div",Yi,[(0,c.Lk)("span",Ji,(0,h.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,c.Lk)("div",en,[(0,c.bF)(k,{modelValue:n.defaultUrlFormat,"onUpdate:modelValue":t[22]||(t[22]=e=>n.defaultUrlFormat=e),class:"radio-card-group grid-2x2"},{default:(0,c.k6)(()=>[(0,c.bF)(R,{label:"originUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"link",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,c.bF)(R,{label:"mdUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code",class:"radio-icon"}),t[37]||(t[37]=(0,c.Lk)("span",null,"Markdown",-1))]),_:1}),(0,c.bF)(R,{label:"htmlUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[38]||(t[38]=(0,c.Lk)("span",null,"HTML",-1))]),_:1}),(0,c.bF)(R,{label:"bbUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[39]||(t[39]=(0,c.Lk)("span",null,"BBCode",-1))]),_:1}),(0,c.bF)(R,{label:"tgId",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"paper-plane",class:"radio-icon"}),t[40]||(t[40]=(0,c.Lk)("span",null,"TG File ID",-1))]),_:1}),(0,c.bF)(R,{label:"s3Location",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"cloud",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.s3Link")),1)]),_:1})]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",tn,[(0,c.Lk)("div",an,[(0,c.Lk)("span",nn,(0,h.v_)(e.$t("settings.customLink")),1),(0,c.bF)(p,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,c.Lk)("div",sn,[(0,c.Lk)("div",rn,[(0,c.Lk)("span",on,(0,h.v_)(e.$t("settings.enableCustom")),1),(0,c.bF)(N,{modelValue:n.useCustomUrl,"onUpdate:modelValue":t[23]||(t[23]=e=>n.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===n.useCustomUrl?((0,c.uX)(),(0,c.CE)("div",ln,[(0,c.Lk)("span",dn,(0,h.v_)(e.$t("settings.customPrefix")),1),(0,c.bF)(f,{modelValue:n.customUrlPrefix,"onUpdate:modelValue":t[24]||(t[24]=e=>n.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,c.Q3)("",!0)])]),(0,c.Lk)("div",cn,[(0,c.bF)(A,{type:"primary",onClick:t[25]||(t[25]=e=>n.showUrlDialog=!1),class:"confirm-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,c.bF)(M,{modelValue:n.showTagDialog,"onUpdate:modelValue":t[27]||(t[27]=e=>n.showTagDialog=e),fileId:n.currentTagFile,onTagsUpdated:s.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,c.bF)(V,{modelValue:n.showBatchTagDialog,"onUpdate:modelValue":t[28]||(t[28]=e=>n.showBatchTagDialog=e),selectedFiles:n.selectedFiles,onTagsUpdated:s.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,c.bF)(j,{modelValue:n.showMobileActionModal,"onUpdate:modelValue":t[29]||(t[29]=e=>n.showMobileActionModal=e),title:n.mobileActionIsFolder?s.getFolderName(n.mobileActionFile?.name||""):n.mobileActionFile?.metadata?.FileName||s.getFileName(n.mobileActionFile?.name||""),isFolder:n.mobileActionIsFolder,onAction:s.handleMobileAction},null,8,["modelValue","title","isFolder","onAction"]),(0,c.bF)(K,{modelValue:n.showMobileDirectoryDrawer,"onUpdate:modelValue":t[30]||(t[30]=e=>n.showMobileDirectoryDrawer=e),currentPath:n.currentPath,onNavigate:s.navigateToFolder,onGoBack:s.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"]),(0,c.bF)(Z,{modelValue:n.showMoveDialog,"onUpdate:modelValue":t[31]||(t[31]=e=>n.showMoveDialog=e),"current-directory":n.currentPath,"is-batch-move":n.isBatchMove,"initial-path":n.moveTargetPath,onConfirm:s.confirmMove},null,8,["modelValue","current-directory","is-batch-move","initial-path","onConfirm"])])}a(81148),a(20116),a(13579),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698);var un=a(60782),fn=a(44813),mn=a.n(fn),pn=a(54047),gn=a(46638);class bn{constructor(){this.FILE_LIST_PATH="data/fileList.json",this.fileListCache=null,this.storageWarningShown=!1}getLocalFileList(){const e=this.getMutableFileList();return{...e,files:[...e.files||[]],directories:[...e.directories||[]]}}getMutableFileList(){if(this.fileListCache)return this.fileListCache;try{const e=localStorage.getItem(this.FILE_LIST_PATH);return this.fileListCache=e?JSON.parse(e):this.createEmptyFileList(),this.fileListCache}catch(e){return console.error("Error reading local file list:",e),this.fileListCache=this.createEmptyFileList(),this.fileListCache}}updateFileListCache(e){this.fileListCache=e||this.createEmptyFileList();const t=this.persistFileListCache();return{cacheUpdated:!0,persisted:t}}persistFileListCache(){try{return localStorage.setItem(this.FILE_LIST_PATH,JSON.stringify(this.fileListCache)),!0}catch(e){return this.handleStoragePersistError(e),!1}}createEmptyFileList(){return{files:[],directories:[]}}handleStoragePersistError(e){console.warn("File list is kept in memory because localStorage persistence failed:",e);try{localStorage.removeItem(this.FILE_LIST_PATH)}catch(t){console.warn("Failed to remove stale file list cache:",t)}this.storageWarningShown||(this.storageWarningShown=!0,ye.nk.warning(gn.Ay.global.t("dashboard.fileListMemoryCacheWarning")))}addFile(e){try{const t=this.getMutableFileList();return t.files.push(e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error adding file:",t),!1}}addFolder(e){try{const t=this.getMutableFileList();return!t.directories.includes(e)&&(t.directories.push(e),this.updateFileListCache(t).cacheUpdated)}catch(t){return console.error("Error adding folder:",t),!1}}moveFile(e,t,a=!1,i=""){try{let n=this.getMutableFileList();if(a){const t=n.directories.indexOf(e);-1!==t&&n.directories.splice(t,1)}else{const t=n.files.findIndex(t=>t.name===e);-1!==t&&n.files.splice(t,1)}if(t.startsWith(i)){const e=t.substring(i.length).split("/");if(e.length>1){const t=i+e[0];n.directories.includes(t)||n.directories.push(t)}}return this.updateFileListCache(n).cacheUpdated}catch(n){return console.error("Error moving file:",n),!1}}removeFile(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>t.name!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing file:",t),!1}}removeFolder(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>!t.name.startsWith(e+"/")),t.directories=t.directories.filter(t=>t!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing folder:",t),!1}}getFilesInFolder(e){try{const t=this.getMutableFileList(),a=t.files.filter(t=>t.name.startsWith(e+"/")),i=t.directories.filter(t=>t.startsWith(e+"/"));return{files:a,directories:i}}catch(t){return console.error("Error getting files in folder:",t),{files:[],directories:[]}}}buildFilterParams(e){let t="";return e.accessStatus&&e.accessStatus.length>0&&(t+=`&accessStatus=${encodeURIComponent(e.accessStatus.join(","))}`),e.listType&&e.listType.length>0&&(t+=`&listType=${encodeURIComponent(e.listType.join(","))}`),e.label&&e.label.length>0&&(t+=`&label=${encodeURIComponent(e.label.join(","))}`),e.fileType&&e.fileType.length>0&&(t+=`&fileType=${encodeURIComponent(e.fileType.join(","))}`),e.channel&&e.channel.length>0&&(t+=`&channel=${encodeURIComponent(e.channel.join(","))}`),e.channelName&&e.channelName.length>0&&(t+=`&channelName=${encodeURIComponent(e.channelName.join(","))}`),t}async refreshFileList(e,t="",a="",i="",n={}){t=t.trim();try{let s=`/api/manage/list?count=60&dir=${e}&search=${encodeURIComponent(t)}`;a&&(s+=`&includeTags=${encodeURIComponent(a)}`),i&&(s+=`&excludeTags=${encodeURIComponent(i)}`),s+=this.buildFilterParams(n);const r=await(0,D.A)(s,{method:"GET"}),o=await r.json();return o.isIndexedResponse||ye.nk.warning(gn.Ay.global.t("dashboard.indexingWarning")),this.updateFileListCache(o).cacheUpdated}catch(s){return console.error("Error refreshing file list:",s),!1}}async loadMoreFiles(e,t="",a="",i="",n=60,s={}){t=t.trim();try{const r=this.getMutableFileList(),o=r.files.length;let l=`/api/manage/list?dir=${e}&start=${o}&count=${n}&search=${encodeURIComponent(t)}`;a&&(l+=`&includeTags=${encodeURIComponent(a)}`),i&&(l+=`&excludeTags=${encodeURIComponent(i)}`),l+=this.buildFilterParams(s);const d=await(0,D.A)(l,{method:"GET"}),c=await d.json();return r.files.push(...c.files),this.updateFileListCache(r).cacheUpdated}catch(r){return console.error("Error loading more files:",r),{files:[],directories:[]}}}}const vn=new bn;var kn=a(62388),yn=a(48903),wn=a(90144);function _n(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}function Fn(e,t){const a=Math.min(e.x,t.x),i=Math.min(e.y,t.y),n=Math.abs(t.x-e.x),s=Math.abs(t.y-e.y);return{left:a,top:i,width:n,height:s,right:a+n,bottom:i+s}}function Cn(e){const{modes:t,mainSelector:a=".main-container",viewMode:i,items:n}=e,s=(0,wn.KR)(!1),r=(0,wn.KR)({left:0,top:0,width:0,height:0,right:0,bottom:0});let o=null,l=[],d=!1;const h=768;let u=!1;const f=50,m=10;let p=null,g="";function b(){const e=(0,wn.BA)(i);return t[e]||void 0}function v(){const e=(0,wn.BA)(i);return("card"===e||"list"===e)&&window.innerWidth>h}function k(){v()?u||A():u&&(z(),I())}function y(e){const t=e.target,i=t.closest(a);if(!i)return!1;const n=b();if(n){const e=t.closest(n.itemSelector);if(e){const t=(0,wn.BA)(n.containerRef);if(t&&t.contains(e))return!1}}const s=t.closest("button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container");return!s}function w(e){return e.shiftKey||e.ctrlKey||e.metaKey}function _(){const e=(0,wn.BA)(n);l=e.map(e=>!!e.selected)}let F=0;function C(){function e(){const t=window.innerHeight;let a=0;F>=t-f?a=m:F<=f&&(a=-m),0!==a&&(window.scrollBy(0,a),o&&(o.y-=a,r.value=Fn(o,{x:r.value.right>=o.x?r.value.right:r.value.left,y:F}),$())),p=requestAnimationFrame(e)}null===p&&(p=requestAnimationFrame(e))}function T(){null!==p&&(cancelAnimationFrame(p),p=null)}function S(){g=document.body.style.userSelect,document.body.style.userSelect="none"}function L(){document.body.style.userSelect=g}function $(){const e=b();if(!e)return;const t=(0,wn.BA)(e.containerRef);if(!t)return;const a=(0,wn.BA)(n),i=r.value,s={left:i.left,top:i.top,right:i.right,bottom:i.bottom},o=t.querySelectorAll(e.itemSelector);a.forEach((e,t)=>{const a=o[t];if(!a)return;const i=a.getBoundingClientRect(),n={left:i.left,top:i.top,right:i.right,bottom:i.bottom},r=_n(s,n);d&&l[t]?e.selected=!0:e.selected=r})}function x(e){if(0===e.button&&y(e)){if(o={x:e.clientX,y:e.clientY},d=w(e),_(),!d){const e=(0,wn.BA)(n);e.forEach(e=>{e.selected=!1})}s.value=!0,r.value=Fn(o,o),S(),document.addEventListener("mousemove",E),document.addEventListener("mouseup",D)}}function E(e){if(!s.value||!o)return;const t={x:e.clientX,y:e.clientY};F=e.clientY,r.value=Fn(o,t),$();const a=window.innerHeight;F<=f||F>=a-f?C():T()}function D(e){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",D))}function A(){u||(document.addEventListener("mousedown",x),u=!0)}function I(){u&&(document.removeEventListener("mousedown",x),u=!1)}function z(){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",D))}function U(){k()}return(0,c.wB)(()=>(0,wn.BA)(i),()=>{z(),k()}),(0,c.sV)(()=>{v()&&A(),window.addEventListener("resize",U)}),(0,c.xo)(()=>{z(),L(),T(),I(),window.removeEventListener("resize",U)}),{isDragging:s,selectionRect:r}}const Tn=["time","size","rawName","fileName"],Sn=["asc","desc"];function Ln(e,t,a){try{const i=localStorage.getItem(e);return t.includes(i)?i:a}catch{return a}}var $n={name:"AdminDashBoard",mixins:[yn.A],data(){return{Number:0,directFileCount:0,directFolderCount:0,showLogoutButton:!1,tableData:[],tempSearch:"",search:"",searchKeywords:"",searchIncludeTags:"",searchExcludeTags:"",isSearchMode:!1,currentPage:1,pageSize:15,selectedFiles:[],sortField:Ln("sortField",Tn,"time"),sortOrder:Ln("sortOrder",Sn,"desc"),isUploading:!1,showdetailDialog:!1,detailFile:null,activeUrlTab:"originUrl",defaultUrlFormat:"originUrl",showUrlDialog:!1,useCustomUrl:"false",customUrlPrefix:"",loading:!1,currentPath:"",refreshLoading:!1,showTagDialog:!1,showBatchTagDialog:!1,currentTagFile:"",viewMode:"card",showMobileActionModal:!1,mobileActionFile:null,mobileActionIndex:-1,mobileActionIsFolder:!1,longPressTimer:null,showMobileDirectoryDrawer:!1,jumpPage:"",filters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},channelNameOptions:[],showMoveDialog:!1,moveTargetPath:"/",moveFileKey:"",moveFileIndex:-1,isBatchMove:!1,pageSwipeStartX:null,pageSwipeStartY:null,pageSwipeStartTime:0}},components:{DashboardTabs:oi.A,TagManagementDialog:Me,BatchTagDialog:Ce,SkeletonLoader:Ta,FileCard:ua,FolderCard:wa,FileListItem:Xt,FileDetailDialog:ct,BatchActionBar:kt,MobileActionSheet:Q,MobileDirectoryDrawer:X,DashboardCheckbox:Ia,FilterDropdown:ri,MoveFileDialog:U,LanguageSwitcher:pn.A},setup(){const e=(0,wn.KR)(null),t=(0,wn.KR)(null),a=(0,wn.KR)("card"),i=(0,wn.KR)([]),{isDragging:n,selectionRect:s}=Cn({modes:{card:{containerRef:e,itemSelector:".img-card"},list:{containerRef:t,itemSelector:".list-item"}},viewMode:a,items:i});return{cardContainerRef:e,listContainerRef:t,viewModeRef:a,itemsRef:i,isDragging:n,selectionRect:s}},computed:{...(0,un.L8)(["adminUrlSettings","userConfig"]),filteredTableData(){return this.tableData},totalPages(){return Math.ceil(this.filteredTableData.length/this.pageSize)||1},realTotalPages(){const e=this.directFolderCount+this.directFileCount;return Math.ceil(e/this.pageSize)||1},activeFilterCount(){return Object.values(this.filters).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0)},hasSearchOrFilter(){return this.isSearchMode||this.activeFilterCount>0},paginatedTableData(){const e=this.sortData(this.filteredTableData),t=(this.currentPage-1)*this.pageSize,a=t+this.pageSize;let i=e.slice(t,a);const n=i.filter(e=>this.isImage(e)).map(e=>this.getFileLink(e.name));return i.forEach(e=>{this.isImage(e)&&(e.previewSrcList=n.slice(n.indexOf(this.getFileLink(e.name))).concat(n.slice(0,n.indexOf(this.getFileLink(e.name)))))}),i.forEach(e=>{"TelegramNew"===e.metadata?.Channel||"Telegram"===e.metadata?.Channel?e.channelTag="TG":"CloudflareR2"===e.metadata?.Channel?e.channelTag="R2":"S3"===e.metadata?.Channel?e.channelTag="S3":"Discord"===e.metadata?.Channel?e.channelTag="DC":"HuggingFace"===e.metadata?.Channel?e.channelTag="HF":"WebDAV"===e.metadata?.Channel?e.channelTag="WD":"External"===e.metadata?.Channel?e.channelTag=this.$t("dashboard.externalTag"):e.channelTag=this.$t("dashboard.unknownTag")}),i},sortLabel(){const e={time:"dashboard.sortByTime",size:"dashboard.sortBySize",rawName:"dashboard.sortByRawName",fileName:"dashboard.sortByFileName"},t=this.$t(e[this.sortField]||e.time),a=this.$t("desc"===this.sortOrder?"dashboard.sortDesc":"dashboard.sortAsc");return`${t} · ${a}`},dialogWidth(){return window.innerWidth>768?"50%":"90%"},detailDialogWidth(){return window.innerWidth>768?"70%":"90%"},accessType(){return"White"===this.detailFile?.metadata?.ListType?this.$t("filter.normal"):"Block"===this.detailFile?.metadata?.ListType||"adult"===this.detailFile?.metadata?.Label?this.$t("filter.blocked"):this.$t("filter.normal")},allUrl(){return"External"===this.detailFile?.metadata?.Channel?{originUrl:`${this.detailFile?.metadata?.ExternalLink}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}:{originUrl:`${this.rootUrl}${this.detailFile?.name}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.rootUrl}${this.detailFile?.name}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}},tableColumnNum(){return window.innerWidth>768?3:1},tablePreviewSpan(){return window.innerWidth>768?2:1},disableTooltip(){return window.innerWidth<768},selectPage(){return this.paginatedTableData.every(e=>e.selected)},selectedPageFiles(){return this.paginatedTableData.some(e=>e.selected)},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.userConfig?.urlPrefix||`${document.location.origin}/file/`},isSelectAll:{get(){return this.paginatedTableData.length>0&&this.paginatedTableData.every(e=>e.selected)},set(e){this.paginatedTableData.forEach(t=>t.selected=e)}},isIndeterminate(){const e=this.paginatedTableData.filter(e=>e.selected).length;return e>0&&ee.selected&&!this.selectedFiles.includes(e))),this.selectedFiles=this.selectedFiles.filter(e=>e.selected),this.selectedFiles=this.selectedFiles.filter(t=>e.includes(t))},deep:!0},defaultUrlFormat(e){localStorage.setItem("defaultUrlFormat",e)},showdetailDialog(e){e&&(this.activeUrlTab=this.defaultUrlFormat||"originUrl")},customUrlPrefix(e){this.$store.commit("setAdminUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setAdminUrlSettings",{key:"useCustomUrl",value:e})},currentPath(e){this.tableData.forEach(e=>e.selected=!1)}},methods:{setViewMode(e){this.viewMode!==e&&(this.viewMode=e,localStorage.setItem("viewMode",this.viewMode))},handleSelectAllPage(e){this.paginatedTableData.forEach(t=>t.selected=e)},handleTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!1,this.showMobileActionModal=!0},500)},handleTouchEnd(){this.longPressTimer&&(clearTimeout(this.longPressTimer),this.longPressTimer=null)},handleFolderTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!0,this.showMobileActionModal=!0},500)},handleMobileAction(e){const t=this.mobileActionFile,a=this.mobileActionIndex;if(this.showMobileActionModal=!1,t)switch(e){case"detail":this.openDetailDialog(a,t.name);break;case"copy":this.handleCopy(a,t.name);break;case"folderCopy":this.handleFolderCopy(t.name);break;case"download":this.handleDownload(t.name);break;case"move":this.handleMove(a,t.name);break;case"delete":this.handleDelete(a,t.name);break;case"tag":this.handleTagManagement(t.name);break}},handleGoBack(){const e=this.currentPath.split("/").filter(Boolean);if(e.length>0){e.pop();const t=e.join("/");this.navigateToFolder(t)}this.showMobileDirectoryDrawer=!1},getTagColor(e){const t=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)"];return t[e%t.length]},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)},formatFileSize(e){if(!e||0===e)return"-";if(e=Number(e),isNaN(e))return"-";const t=["B","KB","MB","GB","TB"];let a=0;while(e>=1024&&a0?1:0)+" "+t[a]},handleSearch(){if(this.search=this.tempSearch,this.isSearchMode=""!==this.search.trim(),this.currentPage=1,this.search&&this.search.trim()){const e=[],t=[];let a=this.search;const i=/-#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(i,(e,a)=>(t.push(a.toLowerCase())," "));const n=/#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(n,(t,a)=>(e.push(a.toLowerCase())," ")),this.searchKeywords=a.replace(/\s+/g," ").trim(),this.searchIncludeTags=e.join(","),this.searchExcludeTags=t.join(","),console.log("Search keywords:",this.searchKeywords),console.log("Include tags:",this.searchIncludeTags),console.log("Exclude tags:",this.searchExcludeTags)}else this.searchKeywords="",this.searchIncludeTags="",this.searchExcludeTags="";this.refreshFileList()},handleFilterChange({type:e,filters:t}){this.filters=t,this.currentPage=1,this.refreshFileList()},clearFilters(){this.filters={listType:[],label:[],fileType:[],channel:[],channelName:[]},this.currentPage=1,this.refreshFileList()},async extractChannelNames(){try{const e=await(0,D.A)("/api/channels?includeDisabled=true",{method:"GET"});if(e.ok){const t=await e.json(),a=[],i={telegram:"Telegram",cfr2:"Cloudflare R2",s3:"S3",discord:"Discord",huggingface:"HuggingFace",webdav:"WebDAV"};Object.entries(t).forEach(([e,t])=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{t.name&&a.push({name:t.name,type:t.type,typeLabel:i[e]||e,value:`${t.type}:${t.name}`})})}),a.sort((e,t)=>e.type!==t.type?e.type.localeCompare(t.type):e.name.localeCompare(t.name)),this.channelNameOptions=a}}catch(e){console.error("Failed to fetch channel names:",e)}},handleDownload(e){const t=document.createElement("a");t.href=this.getFileLink(e),t.download=e,t.click()},openDetailDialog(e,t){this.detailFile=this.paginatedTableData[e],this.showdetailDialog=!0},handleTabClick(e){this.activeUrlTab=e.props.name},handleUrlClick(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("dashboard.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("dashboard.copyFailed")})})},handleDetailDelete(e){this.$confirm(this.$t("dashboard.deleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/delete/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&this.tableData.splice(t,1)}}).then(()=>{this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.deleteSuccess")),this.showdetailDialog=!1}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBlock(e){this.$confirm(this.$t("dashboard.blockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/block/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="Block")}}).then(()=>{this.$message.success(this.$t("dashboard.blockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.blockFailed")))}).catch(()=>console.log("Block cancelled"))},handleWhite(e){this.$confirm(this.$t("dashboard.whiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/white/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="White")}}).then(()=>{this.$message.success(this.$t("dashboard.whiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.whiteFailed")))}).catch(()=>console.log("White cancelled"))},handleDelete(e,t){const a=this.tableData.find(e=>e.name===t).isFolder;this.$confirm(a?this.$t("dashboard.deleteFolderConfirm"):this.$t("dashboard.deleteFileConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,D.A)(`/api/manage/delete/${t}?folder=${a}`,{method:"GET"}).then(e=>{if(!e.ok)return Promise.reject("Request failed");{const e=this.tableData.findIndex(e=>e.name===t);-1!==e&&this.tableData.splice(e,1)}}).then(()=>{this.updateStats(-1,!1),vn.removeFile(t),this.$message.success(this.$t("dashboard.deleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBatchDelete(){this.$confirm(this.$t("dashboard.batchDeleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>{const t=e.isFolder;return(0,D.A)(`/api/manage/delete/${e.name}?folder=${t}`,{method:"GET"})});Promise.all(e).then(e=>{let t=0;e.forEach((e,a)=>{if(e.ok){t++;const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[a].name);-1!==e&&this.tableData.splice(e,1),vn.removeFile(this.selectedFiles[a].name)}}),this.selectedFiles=[],this.updateStats(-t,!1),this.$message.success(this.$t("dashboard.batchDeleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchDeleteFailed")))}).catch(()=>console.log("Batch delete cancelled"))},async handleBatchCopy(){const e=this.selectedFiles.filter(e=>!e.isFolder),t=this.selectedFiles.filter(e=>e.isFolder);let a=null;t.length>0&&(a=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")}));try{let n=[...e];for(const e of t)try{const t=await(0,D.A)(`/api/manage/list?dir=${encodeURIComponent(e.name)}&recursive=true&count=-1`,{method:"GET"}),a=await t.json();a.files&&a.files.length>0&&(n=n.concat(a.files))}catch(i){console.error(`获取文件夹 ${e.name} 内容失败:`,i)}if(a&&a.close(),0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===s.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const r=s.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(r),this.$message.success(this.$t("dashboard.batchCopySuccess",{count:s.length}))):this.copyToClipboardFallback(r)}catch(i){a&&a.close(),console.error("Batch copy failed:",i),this.$message.error(this.$t("dashboard.batchCopyFailed"))}},copyToClipboardFallback(e){const t=document.createElement("textarea");document.body.appendChild(t),t.style.position="fixed",t.style.clip="rect(0 0 0 0)",t.style.top="10px",t.value=e,t.select(),document.execCommand("copy"),document.body.removeChild(t),this.$message.success(this.$t("dashboard.batchCopyLinksSuccess"))},handleCopy(e,t){let a="";if("External"===this.paginatedTableData[e].metadata?.Channel)switch(this.defaultUrlFormat){case"originUrl":a=this.paginatedTableData[e].metadata?.ExternalLink;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.paginatedTableData[e].metadata?.ExternalLink})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.paginatedTableData[e].metadata?.ExternalLink}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}else switch(this.defaultUrlFormat){case"originUrl":a=`${this.rootUrl}${t}`;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.rootUrl}${t})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.rootUrl}${t}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}navigator.clipboard?navigator.clipboard.writeText(a).then(()=>this.$message.success(this.$t("dashboard.copyFileLinkSuccess"))):this.copyToClipboardFallback(a)},async loadMoreData(){this.loading=!0;try{await vn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,60,this.filters),await this.fetchFileList()}catch(e){this.$message.error(this.$t("dashboard.loadMoreFailed"))}finally{this.loading=!1}},updateStats(e,t=!1){t?this.Number=e:this.Number+=e},setSortField(e){Tn.includes(e)&&(this.sortField=e,this.currentPage=1,localStorage.setItem("sortField",e))},setSortOrder(e){Sn.includes(e)&&(this.sortOrder=e,this.currentPage=1,localStorage.setItem("sortOrder",e))},sortData(e){if(!Array.isArray(e))return[];const t=e.filter(e=>e.isFolder),a=e.filter(e=>!e.isFolder),i=e=>{const t=e=>{if(null===e||void 0===e||""===e)return null;const t=Number(e);return Number.isFinite(t)?t:null},a=t(e.metadata?.FileSizeBytes);if(null!==a)return a;const i=t(e.metadata?.FileSize);return null!==i?1024*i*1024:t(e.size)??0},n=e=>{switch(this.sortField){case"size":return i(e);case"rawName":return e.metadata?.RawName||e.name||"";case"fileName":return e.metadata?.FileName||e.name||"";case"time":default:return e.metadata?.TimeStamp?new Date(e.metadata.TimeStamp).getTime():0}},s=(e,t)=>{const a=n(e),i=n(t);let s=0;return s="string"===typeof a||"string"===typeof i?String(a||"").localeCompare(String(i||"")):a-i,"desc"===this.sortOrder?-s:s};return t.sort(s),a.sort(s),t.concat(a)},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},handleSelectPage(){this.selectPage?this.paginatedTableData.forEach(e=>e.selected=!1):this.paginatedTableData.forEach(e=>e.selected=!0)},clearSelection(){this.tableData.forEach(e=>e.selected=!1),this.selectedFiles=[]},handleBatchAction(e){"copy"===e?this.handleBatchCopy():"delete"===e?this.handleBatchDelete():"download"===e?this.handleBatchDownload():"move"===e?this.handleBatchMove():"tagManagement"===e?this.handleBatchTagManagement():"ban"===e?this.handleBatchBlock():"white"===e&&this.handleBatchWhite()},handleMove(e,t){this.moveFileKey=t,this.moveFileIndex=e,this.isBatchMove=!1,this.moveTargetPath="/",this.showMoveDialog=!0},handleBatchMove(){this.isBatchMove=!0,this.moveTargetPath="/",this.showMoveDialog=!0},confirmMove(e){const t=e,a=(0,kn.G)(t);if(!a.valid)return void this.$message.error(a.error);const i=t.replace(/^\/+/,"")+(t.endsWith("/")||""===t?"":"/");i!==this.currentPath?(this.showMoveDialog=!1,this.isBatchMove?this.executeBatchMove(i):this.executeSingleMove(i)):this.$message.warning(this.$t("dashboard.moveTargetSameAsCurrent"))},executeSingleMove(e){const t=this.moveFileKey,a=this.tableData.find(e=>e.name===t)?.isFolder;(0,D.A)(`/api/manage/move/${t}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"}).then(i=>{if(!i.ok)return Promise.reject("Request failed");{const i=this.tableData.findIndex(e=>e.name===t);if(-1!==i){const n=e+t.split("/").pop();vn.moveFile(t,n,a,this.currentPath),this.tableData.splice(i,1),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})})}this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},executeBatchMove(e){const t=this.selectedFiles.map(t=>{const a=t.isFolder;return(0,D.A)(`/api/manage/move/${t.name}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"})});Promise.all(t).then(t=>{let a=0;t.forEach((t,i)=>{if(t.ok){a++;const t=this.selectedFiles[i];t.selected=!1;const n=this.tableData.findIndex(e=>e.name===t.name);if(-1!==n){const a=e+t.name.split("/").pop();vn.moveFile(t.name,a,t.isFolder,this.currentPath),this.tableData.splice(n,1)}}}),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})}),this.updateStats(-a,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},handleBatchBlock(){this.$confirm(this.$t("dashboard.batchBlockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,D.A)(`/api/manage/block/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="Block")}}),this.$message.success(this.$t("dashboard.batchBlockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchBlockFailed")))}).catch(()=>console.log("Batch block cancelled"))},handleBatchWhite(){this.$confirm(this.$t("dashboard.batchWhiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,D.A)(`/api/manage/white/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="White")}}),this.$message.success(this.$t("dashboard.batchWhiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchWhiteFailed")))}).catch(()=>console.log("Batch white cancelled"))},handleBatchDownload(){const e=new(mn()),t=e.folder("files"),a={},i=this.selectedFiles.map(async e=>{if(e.isFolder)return;const i=await fetch(this.getFileLink(e.name)),n=await i.blob();let s=e.metadata?.FileName||e.name;if(a[s]){const t=s.substring(s.lastIndexOf(".")),i=s.substring(0,s.lastIndexOf("."));s=`${i}(${a[s]})${t}`,a[e.name]++}else a[s]=1;t.file(s,n)});Promise.all(i).then(()=>e.generateAsync({type:"blob"})).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="files.zip",t.click()})},isVideo(e){if(this.isAudio(e))return!1;let t=e.metadata?.FileType?.includes("video");if(!t){const a=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","rmvb","3gp","mpg","mpeg","m4v","f4v","rm","asf","dat","ts","vob","swf","divx","xvid","m2ts","mts","m2v","3g2","3gp2","3gpp","3gpp2","mpe","m1v","mpv","mpv2","mp2v","m2t","m2ts","m2v","m4v"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isAudio(e){let t=e.metadata?.FileType?.includes("audio");if(!t){const a=["mp3","wav","flac","aac","ogg","wma","m4a","ape","aiff","alac","opus","mid","midi","m4b","m4p","m4r","amr","au","ra","ram"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isImage(e){let t=e.metadata?.FileType?.includes("image");if(!t){const a=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","psd","ai","eps","raw","cr2","nef","orf","sr2","dng","arw","rw2","raf","pef","x3f","srf","erf","mrw","nrw","kdc","dcr","mef","mos","crw","raf","rwl","srw","3fr","fff","iiq","qtk","bay","k25","kdc","dcs","drf","dng","erf","kdc","mdc","mef","mos","mrw","nef","nrw","orf","pef","ptx","pxn","r3d","raf","raw","rwl","rw2","rwz","sr2","srf","x3f"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},getFileLink(e){const t=`/file/${e}?from=admin`;return t},handlePageChange(e){this.currentPage=e,this.currentPage===Math.ceil(this.tableData.length/this.pageSize)&&this.loadMoreData()},isMobileViewport(){return window.innerWidth<768},updateResponsivePageSize(){const e=this.isMobileViewport()?16:15;if(this.pageSize===e)return;const t=(this.currentPage-1)*this.pageSize;this.pageSize=e,this.currentPage=Math.min(Math.floor(t/e)+1,this.realTotalPages)},isSwipeIgnoredTarget(e){return Boolean(e?.closest?.("button, a, input, textarea, select, .el-checkbox, .action-btn, .list-action-btn"))},handlePageSwipeStart(e){if(!this.isMobileViewport()||this.isDragging||this.loading||this.showMobileActionModal||this.showMobileDirectoryDrawer||this.isSwipeIgnoredTarget(e.target))return void this.resetPageSwipe();const t=e.touches?.[0];t&&(this.pageSwipeStartX=t.clientX,this.pageSwipeStartY=t.clientY,this.pageSwipeStartTime=Date.now())},async handlePageSwipeEnd(e){if(null===this.pageSwipeStartX||null===this.pageSwipeStartY)return;const t=e.changedTouches?.[0];if(!t)return void this.resetPageSwipe();const a=t.clientX-this.pageSwipeStartX,i=t.clientY-this.pageSwipeStartY,n=Date.now()-this.pageSwipeStartTime;if(this.resetPageSwipe(),n>700||Math.abs(a)<64||Math.abs(a)<1.35*Math.abs(i))return;const s=a<0?this.currentPage+1:this.currentPage-1;await this.goToSwipePage(s)},resetPageSwipe(){this.pageSwipeStartX=null,this.pageSwipeStartY=null,this.pageSwipeStartTime=0},async goToSwipePage(e){e<1||e>this.realTotalPages||e===this.currentPage||(e>this.totalPages?await this.loadMoreDataUntilPage(e):this.handlePageChange(e))},handleJumpPage(){const e=parseInt(this.jumpPage);isNaN(e)||e<1?this.$message.warning(this.$t("dashboard.invalidPageNumber")):e>this.realTotalPages?this.$message.warning(this.$t("dashboard.pageExceedsMax",{max:this.realTotalPages})):(e>this.totalPages?(this.$message.info(this.$t("dashboard.loadingData")),this.loadMoreDataUntilPage(e)):this.currentPage=e,this.jumpPage="")},async loadMoreDataUntilPage(e){this.loading=!0;try{const t=e*this.pageSize,a=this.filteredTableData.filter(e=>e.isFolder).length,i=this.filteredTableData.filter(e=>!e.isFolder).length,n=Math.max(0,t-a-i);n>0&&(await vn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,n,this.filters),await this.fetchFileList()),this.currentPage=Math.min(e,this.totalPages)}catch(t){this.$message.error(this.$t("dashboard.loadDataFailed"))}finally{this.loading=!1}},isFolder(e){if(e.isFolder)return!0;let t=e.name;if(t.startsWith("http")&&(t=t.split("/file/")[1]),t&&t.includes("/")){const e=this.currentPath?t.substring(this.currentPath.length):t;return""===this.currentPath?!t.split("/")[0].includes("."):e.includes("/")}return!1},getFolderName(e){let t="";if(e&&e.includes("/")){const a=e.split("/");if(""===this.currentPath)t=a[0];else{const a=e.substring(this.currentPath.length);t=a.split("/")[0]}}else t=e;const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileName(e){let t=e.split("/").pop();const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileNameStart(e){if(!e)return"";if(e.length<=30)return e;const t=e.lastIndexOf(".");if(t>0){const a=e.substring(0,t),i=Math.min(a.length,Math.floor(.6*e.length));return a.substring(0,i)}return e.substring(0,Math.floor(.6*e.length))},getFileNameEnd(e){if(!e)return"";if(e.length<=30)return"";const t=e.lastIndexOf(".");if(t>0){const a=e.substring(t),i=e.substring(0,t),n=Math.min(8,Math.floor(.2*i.length));return"…"+i.substring(i.length-n)+a}const a=Math.min(10,Math.floor(.3*e.length));return"…"+e.substring(e.length-a)},enterFolder(e){this.currentPath=e+(e.endsWith("/")?"":"/"),this.refreshFileList()},navigateToFolder(e){this.currentPath=e?e+(e.endsWith("/")?"":"/"):"",this.refreshFileList()},async fetchFileList(){this.loading=!0;try{const e=vn.getLocalFileList(),t=new Set(e.directories||[]),a=e.files||[],i=Array.from(t).map(e=>({name:e,isFolder:!0,selected:!1,metadata:{FileName:e.split("/").pop()}})),n=a.map(e=>({name:e.name,isFolder:!1,selected:!1,metadata:e.metadata}));this.tableData=[...i,...n],this.updateStats(e.totalCount,!0),this.directFileCount=e.directFileCount||0,this.directFolderCount=e.directFolderCount||0}catch(e){console.error("Error fetching file list:",e),this.$message.error(this.$t("dashboard.fetchFileListFailed"))}finally{this.loading=!1}},async refreshFileList(){this.refreshLoading=!0,this.loading=!0;try{const e=await vn.refreshFileList(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,this.filters);if(!e)throw new Error("Refresh failed");await this.fetchFileList()}catch(e){!e.message?.includes("Unauthorized")&&this.$store.state.adminLoggedIn&&(console.error("Error refreshing file list:",e),this.$message.error(this.$t("dashboard.refreshFailed")))}finally{this.refreshLoading=!1,this.loading=!1}},async refreshLocalFileList(){this.refreshLoading=!0,this.loading=!0;try{await this.fetchFileList()}catch(e){console.error("Error refreshing local file list:",e),this.$message.error(this.$t("dashboard.refreshFailed"))}finally{this.refreshLoading=!1,this.loading=!1}},handleTagManagement(e){this.currentTagFile=e,this.showTagDialog=!0},handleBatchTagManagement(){0!==this.selectedFiles.length?this.showBatchTagDialog=!0:this.$message.warning(this.$t("dashboard.selectFilesFirst"))},async handleTagsUpdated(e){const t=this.tableData.findIndex(e=>e.name===this.currentTagFile);-1!==t&&(this.tableData[t].metadata||(this.tableData[t].metadata={}),this.tableData[t].metadata.Tags=e,this.showdetailDialog&&this.detailFile?.name===this.currentTagFile&&(this.detailFile.metadata||(this.detailFile.metadata={}),this.detailFile.metadata.Tags=e))},async handleBatchTagsUpdated(){await this.refreshLocalFileList()},handleMetadataUpdated(e,t){const a=this.tableData.findIndex(t=>t.name===e);-1!==a&&(this.tableData[a].metadata={...this.tableData[a].metadata,...t}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.metadata={...this.detailFile.metadata,...t})},handleFileRenamed(e,t,a){const i=this.tableData.findIndex(t=>t.name===e);-1!==i&&(this.tableData[i].name=t,this.tableData[i].metadata={...this.tableData[i].metadata,...a}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.name=t,this.detailFile.metadata={...this.detailFile.metadata,...a},this.showdetailDialog=!1,this.$nextTick(()=>{this.showdetailDialog=!0}))},generateFileLink(e,t){const a="External"===t?.Channel,i=a?t?.ExternalLink:`${this.rootUrl}${e}`,n=t?.FileName||e;switch(this.defaultUrlFormat){case"originUrl":return i;case"mdUrl":return`![${n}](${i})`;case"htmlUrl":return`${n}`;case"bbUrl":return`[img]${i}[/img]`;case"tgId":return t?.TgFileId||"";case"s3Location":return t?.S3Location||"";default:return i}},async handleFolderCopy(e){const t=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")});try{const a=await(0,D.A)(`/api/manage/list?dir=${encodeURIComponent(e)}&recursive=true&count=-1`,{method:"GET"}),i=await a.json();if(t.close(),!i.files||0===i.files.length)return void this.$message.warning(this.$t("dashboard.folderEmptyNoLinks"));const n=i.files.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length}))):(this.copyToClipboardFallback(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length})))}catch(a){t.close(),console.error("Copy folder links failed:",a),this.$message.error(this.$t("dashboard.copyFolderLinksFailed"))}}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.updateResponsivePageSize(),window.addEventListener("resize",this.updateResponsivePageSize),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,this.refreshFileList().then(()=>this.extractChannelNames()).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("dashboard.syncDataError"))}).finally(()=>{this.loading=!1}),this.customUrlPrefix=this.adminUrlSettings.customUrlPrefix,this.useCustomUrl=this.adminUrlSettings.useCustomUrl;const e=localStorage.getItem("viewMode");"card"!==e&&"list"!==e||(this.viewMode=e)},beforeUnmount(){window.removeEventListener("resize",this.updateResponsivePageSize)}};const xn=(0,I.A)($n,[["render",hn],["__scopeId","data-v-1af8d52e"]]);var En=xn},95385:function(e,t,a){"use strict";a(85331)},98642:function(e,t,a){"use strict";a(85331)}}]); +//# sourceMappingURL=609.3a7a8c93.js.map \ No newline at end of file diff --git a/frontend-dist/js/609.3a7a8c93.js.gz b/frontend-dist/js/609.3a7a8c93.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8b36ac7b79b3d7c58c6378ac26d4d67437eb944a GIT binary patch literal 60017 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/609.3a7a8c93.js.map b/frontend-dist/js/609.3a7a8c93.js.map new file mode 100644 index 0000000..837a6fa --- /dev/null +++ b/frontend-dist/js/609.3a7a8c93.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/609.3a7a8c93.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./node_modules/jszip/dist/jszip.min.js","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cb6d","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cba1","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?2da6","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?256e","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?df02","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?f2e3","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?dfc6","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?9ca8","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?3d52","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?e3f8","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?8ba4","webpack://sanyue_imghub/./src/utils/fileIdValidator.js","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?8cda","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?7b8a","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?ed70","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?3a10","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?6ed7","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?f1ae","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?8969","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?cd9e","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?a03e","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?c47a","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?4854","webpack://sanyue_imghub/./src/components/dashboard/DashboardCheckbox.vue?f571","webpack://sanyue_imghub/./src/components/dashboard/DashboardCheckbox.vue","webpack://sanyue_imghub/./src/components/dashboard/DashboardCheckbox.vue?06e7","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?3dd3","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?09c8","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?f722","webpack://sanyue_imghub/./src/utils/fileManager.js","webpack://sanyue_imghub/./src/utils/dashboard/rectIntersects.js","webpack://sanyue_imghub/./src/utils/dashboard/useDragSelect.js","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?40d2"],"sourcesContent":["import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"move-file-dialog-wrapper\"\n};\nconst _hoisted_2 = {\n class: \"move-dialog-content\"\n};\nconst _hoisted_3 = {\n class: \"move-path-input-container\"\n};\nconst _hoisted_4 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_6 = {\n class: \"move-drawer-content\"\n};\nconst _hoisted_7 = {\n class: \"move-path-section\"\n};\nconst _hoisted_8 = {\n class: \"move-path-label\"\n};\nconst _hoisted_9 = {\n class: \"move-path-input-row\"\n};\nconst _hoisted_10 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"embedded-tree-section\"\n};\nconst _hoisted_12 = {\n class: \"tree-section-header\"\n};\nconst _hoisted_13 = {\n class: \"tree-section-title\"\n};\nconst _hoisted_14 = {\n class: \"tree-container\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_16 = {\n class: \"error-text\"\n};\nconst _hoisted_17 = {\n class: \"node-label\"\n};\nconst _hoisted_18 = {\n class: \"drawer-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_dialog, {\n key: 0,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n width: \"500px\",\n \"show-close\": true,\n class: \"move-dialog\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, {\n prepend: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_DirectoryTreePicker, {\n \"current-directory\": $props.currentDirectory,\n source: \"admin\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-picker-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])]), _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t('moveFile.hint')), 1)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"])) : (_openBlock(), _createBlock(_component_el_drawer, {\n key: 1,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n direction: \"btt\",\n size: \"auto\",\n \"show-close\": true,\n class: \"move-drawer\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n onClick: $options.handleClose,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n class: \"directory-picker-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showTreePicker = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('moveFile.hintMobile')), 1)]), $data.showTreePicker ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('moveFile.selectDirectory')), 1), _createVNode(_component_el_button, {\n text: \"\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showTreePicker = false)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })]), _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_14, [$data.treeError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_16, _toDisplayString($data.treeError), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleTreeNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.treeLoading]])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"]))]);\n}","import DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'MoveFileDialog',\n components: {\n DirectoryTreePicker\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentDirectory: {\n type: String,\n default: ''\n },\n isBatchMove: {\n type: Boolean,\n default: false\n },\n initialPath: {\n type: String,\n default: '/'\n }\n },\n emits: ['update:modelValue', 'confirm', 'close'],\n data() {\n return {\n targetPath: '/',\n loading: false,\n windowWidth: window.innerWidth,\n // 移动端内嵌树相关\n showTreePicker: false,\n treeData: [],\n treeLoading: false,\n treeError: '',\n treeProps: {\n children: 'children',\n label: 'name'\n }\n };\n },\n computed: {\n dialogVisible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n isDesktop() {\n return this.windowWidth > 768;\n }\n },\n watch: {\n modelValue(newVal) {\n if (newVal) {\n this.targetPath = this.initialPath || '/';\n this.showTreePicker = false;\n }\n },\n showTreePicker(newVal) {\n if (newVal && !this.isDesktop) {\n this.fetchDirectoryTree();\n }\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n handleDirectorySelect(path) {\n this.targetPath = path;\n },\n handleConfirm() {\n this.$emit('confirm', this.targetPath);\n },\n handleClose() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n },\n // 移动端内嵌树相关方法\n async fetchDirectoryTree() {\n this.treeLoading = true;\n this.treeError = '';\n try {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.treeError = this.$t('moveFile.authFailed');\n } else {\n this.treeError = this.$t('moveFile.serverError');\n }\n return;\n }\n const data = await response.json();\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n this.treeError = this.$t('moveFile.loadTreeFailed');\n } finally {\n this.treeLoading = false;\n }\n },\n handleTreeNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.targetPath = path;\n this.showTreePicker = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MoveFileDialog.vue?vue&type=template&id=7aaa437c&scoped=true\"\nimport script from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\nexport * from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\n\nimport \"./MoveFileDialog.vue?vue&type=style&index=0&id=7aaa437c&scoped=true&lang=css\"\nimport \"./MoveFileDialog.vue?vue&type=style&index=1&id=7aaa437c&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7aaa437c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"mobile-drawer-header\"\n};\nconst _hoisted_2 = {\n class: \"mobile-drawer-title\"\n};\nconst _hoisted_3 = {\n class: \"mobile-drawer-content\"\n};\nconst _hoisted_4 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"drawer-slide\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-overlay\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"mobile-drawer\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('mobileDirectory.title')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"mobile-drawer-close\",\n onClick: $options.close\n }, null, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: !$props.currentPath\n }]),\n onClick: _cache[0] || (_cache[0] = $event => $options.navigate(''))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.rootDirectory')), 1)], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pathParts, (folder, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: index === $options.pathParts.length - 1\n }]),\n style: _normalizeStyle({\n paddingLeft: (index + 1) * 16 + 16 + 'px'\n }),\n onClick: $event => $options.navigate($options.pathParts.slice(0, index + 1).join('/'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(folder), 1)], 14, _hoisted_4);\n }), 128)), $props.currentPath ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-back\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goBack && $options.goBack(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.goBack')), 1)])) : _createCommentVNode(\"\", true)])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'MobileDirectoryDrawer',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentPath: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'navigate', 'goBack'],\n computed: {\n pathParts() {\n return this.currentPath.split('/').filter(Boolean);\n }\n },\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n navigate(path) {\n this.$emit('navigate', path);\n this.close();\n },\n goBack() {\n this.$emit('goBack');\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileDirectoryDrawer.vue?vue&type=template&id=feeadb1c&scoped=true\"\nimport script from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\nexport * from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\n\nimport \"./MobileDirectoryDrawer.vue?vue&type=style&index=0&id=feeadb1c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-feeadb1c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"bottom-sheet-header\"\n};\nconst _hoisted_2 = {\n class: \"bottom-sheet-title\"\n};\nconst _hoisted_3 = {\n class: \"bottom-sheet-content\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"bottom-sheet\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bottom-sheet-overlay\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet\",\n onClick: _cache[8] || (_cache[8] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_cache[10] || (_cache[10] = _createElementVNode(\"div\", {\n class: \"bottom-sheet-handle\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1)]), _createElementVNode(\"div\", _hoisted_3, [!$props.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[0] || (_cache[0] = $event => $options.handleAction('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.viewDetail')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[1] || (_cache[1] = $event => $options.handleAction('copy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleAction('download'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.downloadFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleAction('tag'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.tagManagement')), 1)])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[5] || (_cache[5] = $event => $options.handleAction('folderCopy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[6] || (_cache[6] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFolder')), 1)])], 64)), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item bottom-sheet-danger\",\n onClick: _cache[7] || (_cache[7] = $event => $options.handleAction('delete'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString($props.isFolder ? _ctx.$t('mobileAction.deleteFolder') : _ctx.$t('mobileAction.deleteFile')), 1)])])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","export default {\n name: 'MobileActionSheet',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n title: {\n type: String,\n default: ''\n },\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:modelValue', 'action'],\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n handleAction(action) {\n this.$emit('action', action);\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileActionSheet.vue?vue&type=template&id=f5c66568&scoped=true\"\nimport script from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\nexport * from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\n\nimport \"./MobileActionSheet.vue?vue&type=style&index=0&id=f5c66568&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f5c66568\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"batch-tag-container\"\n};\nconst _hoisted_2 = {\n class: \"tab-content\"\n};\nconst _hoisted_3 = {\n class: \"tab-description\"\n};\nconst _hoisted_4 = {\n class: \"input-section\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_6 = [\"onClick\"];\nconst _hoisted_7 = {\n class: \"tags-to-add-section\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_9 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_10 = {\n class: \"action-buttons\"\n};\nconst _hoisted_11 = {\n class: \"tab-content\"\n};\nconst _hoisted_12 = {\n class: \"tab-description\"\n};\nconst _hoisted_13 = {\n key: 0,\n class: \"common-tags-section\"\n};\nconst _hoisted_14 = {\n class: \"tags-container\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_16 = {\n class: \"tab-content\"\n};\nconst _hoisted_17 = {\n class: \"tab-description\"\n};\nconst _hoisted_18 = {\n class: \"action-buttons\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_alert = _resolveComponent(\"el-alert\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('batchTag.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.activeTab = $event),\n type: \"border-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.addTab'),\n name: \"add\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t('batchTag.addDescription', {\n count: $options.fileCount\n })), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('batchTag.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddInputTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddInputTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_6);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.pendingTags')), 1), $data.tagsToAdd.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.tagsToAdd, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.removeFromToAdd(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('batchTag.noPendingTags')), 1))]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.executeAddTags,\n loading: $data.loading,\n disabled: $data.tagsToAdd.length === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.addToAllFiles')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"disabled\"])])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.removeTab'),\n name: \"remove\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t('batchTag.removeDescription')), 1), $data.commonTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.commonTags')), 1), _createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.commonTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveCommonTag(tag),\n class: \"tag-item\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('batchTag.noCommonTags')), 1))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.clearTab'),\n name: \"clear\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"p\", _hoisted_17, _toDisplayString(_ctx.$t('batchTag.clearDescription', {\n count: $options.fileCount\n })), 1), _createVNode(_component_el_alert, {\n title: _ctx.$t('batchTag.clearWarningTitle'),\n type: \"warning\",\n description: _ctx.$t('batchTag.clearWarningDesc'),\n closable: false,\n style: {\n \"margin-bottom\": \"20px\"\n },\n center: \"\"\n }, null, 8, [\"title\", \"description\"]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n type: \"danger\",\n onClick: $options.handleClearAllTags,\n loading: $data.loading\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.confirmClearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'BatchTagDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n selectedFiles: {\n type: Array,\n required: true,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n activeTab: 'add',\n inputTag: '',\n tagsToAdd: [],\n commonTags: [],\n suggestions: [],\n showSuggestions: false,\n loading: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '600px';\n },\n selectedFilesOnly() {\n // 排除文件夹,只保留文件\n return this.selectedFiles.filter(file => !file.isFolder);\n },\n fileCount() {\n return this.selectedFilesOnly.length;\n },\n fileIds() {\n return this.selectedFilesOnly.map(file => file.name);\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadCommonTags();\n } else {\n this.resetData();\n }\n },\n activeTab(newTab) {\n if (newTab === 'remove') {\n this.loadCommonTags();\n }\n }\n },\n methods: {\n resetData() {\n this.tagsToAdd = [];\n this.inputTag = '';\n this.showSuggestions = false;\n this.activeTab = 'add';\n },\n async loadCommonTags() {\n if (this.selectedFilesOnly.length === 0) {\n this.commonTags = [];\n return;\n }\n try {\n // 获取所有文件的标签\n const tagPromises = this.selectedFilesOnly.map(file => fetchWithAuth(`/api/manage/tags/${encodeURIComponent(file.name)}`, {\n method: 'GET'\n }));\n const responses = await Promise.all(tagPromises);\n const allTags = [];\n for (const response of responses) {\n if (response.ok) {\n const data = await response.json();\n allTags.push(data.tags || []);\n }\n }\n\n // 找出共有标签\n if (allTags.length > 0) {\n this.commonTags = allTags[0].filter(tag => allTags.every(tags => tags.includes(tag)));\n } else {\n this.commonTags = [];\n }\n } catch (error) {\n console.error('Error loading common tags:', error);\n ElMessage.error(this.$t('batchTag.loadCommonTagsFailed'));\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.tagsToAdd.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddInputTag();\n },\n handleAddInputTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.tagsToAdd.includes(tag)) {\n ElMessage.warning(this.$t('batchTag.tagAlreadyInList'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n this.tagsToAdd.push(tag);\n this.inputTag = '';\n this.showSuggestions = false;\n },\n removeFromToAdd(tag) {\n const index = this.tagsToAdd.indexOf(tag);\n if (index > -1) {\n this.tagsToAdd.splice(index, 1);\n }\n },\n async executeAddTags() {\n if (this.tagsToAdd.length === 0) {\n ElMessage.warning(this.$t('batchTag.pleaseAddTags'));\n return;\n }\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'add',\n tags: this.tagsToAdd\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.addSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.tagsToAdd = [];\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tags:', error);\n ElMessage.error(this.$t('batchTag.addFailed'));\n } finally {\n this.loading = false;\n }\n },\n async handleRemoveCommonTag(tag) {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.removeSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n await this.loadCommonTags();\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('batchTag.removeFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClearAllTags() {\n ElMessageBox.confirm(this.$t('batchTag.clearConfirmMessage', {\n count: this.fileCount\n }), this.$t('batchTag.clearConfirmTitle'), {\n confirmButtonText: this.$t('batchTag.clearConfirmOk'),\n cancelButtonText: this.$t('batchTag.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.executeClearTags();\n }).catch(() => {\n ElMessage.info(this.$t('batchTag.clearCancelled'));\n });\n },\n async executeClearTags() {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'set',\n tags: []\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.clearSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.commonTags = [];\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } catch (error) {\n console.error('Error clearing tags:', error);\n ElMessage.error(this.$t('batchTag.clearFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClose() {\n this.visible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchTagDialog.vue?vue&type=template&id=54f87f24&scoped=true\"\nimport script from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\nexport * from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\n\nimport \"./BatchTagDialog.vue?vue&type=style&index=0&id=54f87f24&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-54f87f24\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tag-management-container\"\n};\nconst _hoisted_2 = {\n class: \"input-section\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_4 = [\"onClick\"];\nconst _hoisted_5 = {\n class: \"current-tags-section\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_8 = {\n class: \"popular-tags-section\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_10 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_11 = {\n key: 2,\n class: \"empty-message\"\n};\nconst _hoisted_12 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_Loading = _resolveComponent(\"Loading\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('tagManagement.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_12, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('tagManagement.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('tagManagement.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_4);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.currentTags')), 1), $data.currentTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveTag(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('tagManagement.noTags')), 1))]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.popularTags')), 1), $data.popularTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.popularTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n onClick: $event => $options.handleAddPopularTag(tag),\n class: \"tag-item clickable\",\n type: \"info\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))])) : $data.loadingPopularTags ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [_createVNode(_component_el_icon, {\n class: \"is-loading\"\n }, {\n default: _withCtx(() => [_createVNode(_component_Loading)]),\n _: 1\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('tagManagement.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('tagManagement.noPopularTags')), 1))])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { ElMessage } from 'element-plus';\nimport { Loading } from '@element-plus/icons-vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'TagManagementDialog',\n components: {\n Loading\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n fileId: {\n type: String,\n required: true\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n currentTags: [],\n inputTag: '',\n suggestions: [],\n popularTags: [],\n showSuggestions: false,\n loading: false,\n loadingPopularTags: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '500px';\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadFileTags();\n this.loadPopularTags();\n }\n }\n },\n methods: {\n async loadFileTags() {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n } else {\n throw new Error('Failed to load tags');\n }\n } catch (error) {\n console.error('Error loading file tags:', error);\n ElMessage.error(this.$t('tagManagement.loadFailed'));\n }\n },\n async loadPopularTags() {\n this.loadingPopularTags = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/autocomplete?limit=20', {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.popularTags = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n }\n } catch (error) {\n console.error('Error loading popular tags:', error);\n } finally {\n this.loadingPopularTags = false;\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddTag();\n },\n async handleAddTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.currentTags.includes(tag)) {\n ElMessage.warning(this.$t('tagManagement.tagExists'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'add',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n this.inputTag = '';\n this.showSuggestions = false;\n ElMessage.success(this.$t('tagManagement.addSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n const error = await response.json();\n throw new Error(error.message || this.$t('tagManagement.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tag:', error);\n ElMessage.error(error.message || this.$t('tagManagement.addFailed'));\n }\n },\n async handleRemoveTag(tag) {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n ElMessage.success(this.$t('tagManagement.removeSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n throw new Error(this.$t('tagManagement.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('tagManagement.removeFailed'));\n }\n },\n handleAddPopularTag(tag) {\n this.inputTag = tag;\n this.handleAddTag();\n },\n handleClose() {\n this.visible = false;\n this.inputTag = '';\n this.showSuggestions = false;\n this.currentTags = [];\n this.popularTags = [];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./TagManagementDialog.vue?vue&type=template&id=1dabc380&scoped=true\"\nimport script from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\nexport * from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\n\nimport \"./TagManagementDialog.vue?vue&type=style&index=0&id=1dabc380&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1dabc380\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\";\nconst _hoisted_1 = {\n class: \"detail-actions\"\n};\nconst _hoisted_2 = {\n class: \"preview-section\"\n};\nconst _hoisted_3 = {\n class: \"preview-content\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 1\n};\nconst _hoisted_8 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"6px\"\n }\n};\nconst _hoisted_9 = {\n key: 1,\n style: {\n \"color\": \"var(--el-text-color-secondary)\"\n }\n};\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"flex-wrap\": \"wrap\",\n \"gap\": \"5px\"\n }\n};\nconst _hoisted_11 = {\n key: 1,\n style: {\n \"color\": \"var(--el-text-color-secondary)\"\n }\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('fileDetail.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $options.visible = $event),\n width: $options.dialogWidth\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [!$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('download')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.download')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 1,\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('tagManagement')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.tags')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 2,\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('block')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ban\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.blacklist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 3,\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = $event => _ctx.$emit('white')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.whitelist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 4,\n type: \"danger\",\n onClick: _cache[4] || (_cache[4] = $event => _ctx.$emit('delete')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.deleteBtn')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 5,\n type: \"warning\",\n onClick: _cache[5] || (_cache[5] = $event => $options.startEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.edit')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 6,\n type: \"info\",\n onClick: _cache[6] || (_cache[6] = $event => $options.openRenameDialog()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"i-cursor\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.rename')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 7,\n type: \"success\",\n onClick: _cache[7] || (_cache[7] = $event => $options.saveMetadata()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\",\n loading: $data.editSaving\n }, {\n default: _withCtx(() => [!$data.editSaving ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"save\",\n style: {\n \"margin-right\": \"3px\"\n }\n })) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.save')), 1)]),\n _: 1\n }, 8, [\"loading\"])) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 8,\n onClick: _cache[8] || (_cache[8] = $event => $options.cancelEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.cancel')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.activeTab = $event),\n onTabClick: $options.handleTabClick,\n style: {\n \"margin-bottom\": \"10px\"\n }\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('fileDetail.originUrl'),\n name: \"originUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.originUrl,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $props.urls.originUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: \"Markdown\",\n name: \"mdUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.mdUrl,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $props.urls.mdUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"HTML\",\n name: \"htmlUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.htmlUrl,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $props.urls.htmlUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"BBCode\",\n name: \"bbUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.bbUrl,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $props.urls.bbUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), $props.file?.metadata?.TgFileId ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 0,\n label: \"TG File ID\",\n name: \"tgId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.tgId,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $props.urls.tgId = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3Location ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 1,\n label: \"S3 Location\",\n name: \"s3Location\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3Location,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $props.urls.S3Location = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3CdnFileUrl ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 2,\n label: \"S3 CDN URL\",\n name: \"s3CdnFileUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3CdnFileUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $props.urls.S3CdnFileUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"modelValue\", \"onTabClick\"]), _createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [$options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 0,\n src: $props.fileLink,\n autoplay: \"\",\n muted: \"\",\n loop: \"\",\n class: \"video-preview\",\n onClick: _cache[17] || (_cache[17] = (...args) => $options.openImageLink && $options.openImageLink(...args))\n }, null, 8, _hoisted_4)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"audio\", {\n key: 1,\n src: $props.fileLink,\n controls: \"\",\n autoplay: \"\",\n class: \"audio-preview\"\n }, null, 8, _hoisted_5)) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n src: $props.fileLink,\n \"preview-src-list\": [$props.fileLink],\n \"preview-teleported\": true,\n fit: \"contain\",\n lazy: \"\",\n class: \"image-preview\"\n }, null, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"file-icon-detail\"\n }))])]), _createVNode(_component_el_descriptions, {\n border: \"\",\n column: $options.descColumn\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileNameLabel')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileName,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.editForm.FileName = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString($props.file?.metadata?.FileName || $props.file?.name), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileType')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileType,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.editForm.FileType = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileTypePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString($props.file?.metadata?.FileType || _ctx.$t('fileDetail.unknown')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileSizeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.fileSizeDisplay), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.imageDimensions')\n }, {\n default: _withCtx(() => [$options.imageDimensions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Width) + \" × \" + _toDisplayString($props.file?.metadata?.Height), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"display\": \"inline-flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.orientationIcon), 1)]),\n _: 1\n })])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('fileDetail.noDimensions')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadTimeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.uploadTime), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.channelTypeAndName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.Channel || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.ChannelName || '-'), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.accessStatusAndReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: $options.accessTagType,\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.accessType), 1)]),\n _: 1\n }, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Label || _ctx.$t('fileDetail.noTags')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadIP')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadIP || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadAddressLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadAddress || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileTags')\n }, {\n default: _withCtx(() => [$props.file?.metadata?.Tags && $props.file?.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.file?.metadata?.Tags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1024);\n }), 128))])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('fileDetail.noTags')), 1))]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"column\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showRenameDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showRenameDialog = $event),\n title: _ctx.$t('fileDetail.renameTitle'),\n width: $options.dialogWidth,\n \"append-to-body\": \"\"\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[21] || (_cache[21] = $event => $options.closeRenameDialog())\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameCancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[22] || (_cache[22] = $event => $options.submitRename()),\n loading: $data.renameSaving,\n disabled: !$data.renameValidation.valid\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameConfirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n onSubmit: _withModifiers($options.submitRename, [\"prevent\"])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('fileDetail.renameLabel'),\n error: $data.renameValidation.error\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.renameForm.newFileId,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.renameForm.newFileId = $event),\n placeholder: _ctx.$t('fileDetail.renamePlaceholder'),\n onInput: $options.validateRenameInput,\n clearable: \"\"\n }, null, 8, [\"modelValue\", \"placeholder\", \"onInput\"])]),\n _: 1\n }, 8, [\"label\", \"error\"])]),\n _: 1\n }, 8, [\"onSubmit\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","/**\r\n * File_ID 验证器模块\r\n * 提供 File_ID 格式验证功能,用于重命名操作的前端校验\r\n * 非法字符规则复用 pathValidator 的字符集\r\n */\r\n\r\n/**\r\n * 非法字符正则表达式\r\n * 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n * 与 pathValidator.js 保持一致\r\n */\r\nconst INVALID_CHARS = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n\r\n/**\r\n * 验证 File_ID 格式\r\n * @param {string} newFileId - 新的 File_ID\r\n * @param {string} currentFileId - 当前 File_ID\r\n * @returns {{ valid: boolean, error?: string }}\r\n */\r\nexport function validateFileId(newFileId, currentFileId) {\r\n // 1. 空值/纯空白检测\r\n if (!newFileId || newFileId.trim() === '') {\r\n return {\r\n valid: false,\r\n error: '文件名不能为空'\r\n };\r\n }\r\n\r\n // 2. 与当前 File_ID 相同检测\r\n if (newFileId === currentFileId) {\r\n return {\r\n valid: false,\r\n error: '文件名未发生变化'\r\n };\r\n }\r\n\r\n // 3. 路径穿越检测\r\n if (newFileId.includes('..')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含路径穿越字符 \"..\"'\r\n };\r\n }\r\n\r\n // 3.5 单独的 . 路径段检测(仅检查 /./ 或开头 ./,不检查末尾以允许继续输入如 .123)\r\n if (/\\/\\.\\//.test(newFileId) || /^\\.\\//.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含单独的 \".\" 路径段'\r\n };\r\n }\r\n\r\n // 4. 非法字符检测(复用 pathValidator 的字符规则)\r\n if (INVALID_CHARS.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名包含非法字符,请使用合法的文件名格式'\r\n };\r\n }\r\n\r\n // 5. 连续斜杠检测\r\n if (newFileId.includes('//')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含连续的斜杠'\r\n };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n","import { ElMessage } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFileId } from '@/utils/fileIdValidator';\nexport default {\n name: 'FileDetailDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n file: {\n type: Object,\n default: null\n },\n fileLink: {\n type: String,\n default: ''\n },\n urls: {\n type: Object,\n default: () => ({\n originUrl: '',\n mdUrl: '',\n htmlUrl: '',\n bbUrl: '',\n tgId: '',\n S3Location: '',\n S3CdnFileUrl: ''\n })\n }\n },\n emits: ['update:modelValue', 'download', 'tagManagement', 'block', 'white', 'delete', 'metadataUpdated', 'fileRenamed'],\n watch: {\n visible(val) {\n if (!val) {\n // 关闭弹窗时退出编辑状态\n this.isEditing = false;\n this.editSaving = false;\n }\n }\n },\n data() {\n return {\n activeTab: 'originUrl',\n isEditing: false,\n editForm: {\n FileName: '',\n FileType: ''\n },\n editSaving: false,\n showRenameDialog: false,\n renameForm: {\n newFileId: ''\n },\n renameValidation: {\n valid: true,\n error: ''\n },\n renameSaving: false\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '95%' : '900px';\n },\n descColumn() {\n return window.innerWidth < 768 ? 1 : 2;\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n uploadTime() {\n if (this.file?.metadata?.TimeStamp) {\n return new Date(this.file.metadata.TimeStamp).toLocaleString();\n }\n return this.$t('fileDetail.unknown');\n },\n accessType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return this.$t('fileDetail.accessNormalWhitelist');\n if (listType === 'Block') return this.$t('fileDetail.accessBlockedBlacklist');\n if (label === 'adult') return this.$t('fileDetail.accessBlockedReview');\n return this.$t('fileDetail.accessNormal');\n },\n accessTagType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return 'success';\n if (listType === 'Block') return 'danger';\n if (label === 'adult') return 'danger';\n return 'success';\n },\n imageDimensions() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (width && height) return true;\n return null;\n },\n orientationIcon() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (!width || !height) return '';\n const ratio = width / height;\n if (ratio > 1.1) return this.$t('fileDetail.orientationLandscape');\n if (ratio < 0.9) return this.$t('fileDetail.orientationPortrait');\n return this.$t('fileDetail.orientationSquare');\n },\n fileSizeDisplay() {\n const sizeBytes = this.file?.metadata?.FileSizeBytes;\n const sizeMB = this.file?.metadata?.FileSize;\n if (sizeBytes) {\n // 根据大小选择合适的单位\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(2)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return this.$t('fileDetail.unknown');\n }\n },\n methods: {\n handleVideoClick(e) {\n const video = e.target;\n if (video.paused) video.play();else video.pause();\n },\n handleTabClick() {},\n handleUrlClick(e) {\n const input = e.target;\n input.select();\n navigator.clipboard.writeText(input.value).then(() => {\n ElMessage.success(this.$t('fileDetail.linkCopied'));\n });\n },\n openImageLink() {\n if (this.fileLink) {\n window.open(this.fileLink, '_blank');\n }\n },\n startEdit() {\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.isEditing = true;\n },\n cancelEdit() {\n this.isEditing = false;\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.editSaving = false;\n },\n async saveMetadata() {\n this.editSaving = true;\n try {\n const fileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/metadata/${fileId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n FileName: this.editForm.FileName,\n FileType: this.editForm.FileType\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.metadataSaved'));\n this.isEditing = false;\n this.$emit('metadataUpdated', fileId, data.metadata);\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n }\n } catch (error) {\n console.error('Error saving metadata:', error);\n ElMessage.error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n } finally {\n this.editSaving = false;\n }\n },\n openRenameDialog() {\n this.renameForm.newFileId = this.file?.name || '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n this.showRenameDialog = true;\n },\n closeRenameDialog() {\n this.showRenameDialog = false;\n this.renameForm.newFileId = '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n },\n validateRenameInput() {\n const result = validateFileId(this.renameForm.newFileId, this.file?.name || '');\n this.renameValidation = {\n valid: result.valid,\n error: result.error || ''\n };\n },\n async submitRename() {\n if (this.renameSaving) return;\n\n // Validate input first\n this.validateRenameInput();\n if (!this.renameValidation.valid) {\n return;\n }\n this.renameSaving = true;\n try {\n const oldFileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/rename/${oldFileId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n newFileId: this.renameForm.newFileId\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.renameSuccess'));\n this.showRenameDialog = false;\n this.$emit('fileRenamed', oldFileId, this.renameForm.newFileId, data.metadata);\n } else if (response.status === 409) {\n // Conflict — target File_ID already exists\n this.renameValidation = {\n valid: false,\n error: this.$t('fileDetail.renameConflict')\n };\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.renameFailed'));\n }\n } catch (error) {\n console.error('Error renaming file:', error);\n ElMessage.error(error.message || this.$t('fileDetail.renameFailed'));\n } finally {\n this.renameSaving = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileDetailDialog.vue?vue&type=template&id=550287cc&scoped=true\"\nimport script from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\nexport * from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\n\nimport \"./FileDetailDialog.vue?vue&type=style&index=0&id=550287cc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-550287cc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"batch-floating-bar\"\n};\nconst _hoisted_2 = {\n class: \"batch-selection-summary\"\n};\nconst _hoisted_3 = {\n class: \"batch-selection-count\"\n};\nconst _hoisted_4 = {\n class: \"batch-floating-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"batch-toolbar\"\n }, {\n default: _withCtx(() => [$props.selectedCount > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.clearSelection'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"batch-floating-btn ghost\",\n \"aria-label\": _ctx.$t('dashboard.clearSelection'),\n onClick: $options.handleClear\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"batch-floating-icon\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: `${$props.selectedCount} ${_ctx.$t('dashboard.selectedItems')}`,\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.selectedCount), 1)])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _cache[0] || (_cache[0] = _createElementVNode(\"span\", {\n class: \"batch-toolbar-divider\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_4, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.actions, action => {\n return _openBlock(), _createBlock(_component_el_tooltip, {\n key: action.command,\n disabled: $options.disableTooltip,\n content: _ctx.$t(action.label),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"batch-floating-btn\", action.className]),\n \"aria-label\": _ctx.$t(action.label),\n onClick: $event => $options.handleAction(action.command)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: action.icon,\n class: \"batch-floating-icon\"\n }, null, 8, [\"icon\"])]),\n _: 2\n }, 1032, [\"class\", \"aria-label\", \"onClick\"])]),\n _: 2\n }, 1032, [\"disabled\", \"content\"]);\n }), 128))])])) : _createCommentVNode(\"\", true)]),\n _: 1\n });\n}","export default {\n name: 'BatchActionBar',\n props: {\n selectedCount: {\n type: Number,\n required: true\n }\n },\n emits: ['action', 'clear'],\n data() {\n return {\n actions: [{\n command: 'copy',\n label: 'dashboard.copy',\n icon: 'copy',\n className: 'copy'\n }, {\n command: 'download',\n label: 'dashboard.download',\n icon: 'download',\n className: 'download'\n }, {\n command: 'move',\n label: 'dashboard.move',\n icon: 'file-export',\n className: 'move'\n }, {\n command: 'tagManagement',\n label: 'dashboard.tagManagement',\n icon: 'tags',\n className: 'tag'\n }, {\n command: 'ban',\n label: 'dashboard.addToBlacklist',\n icon: 'ban',\n className: 'ban'\n }, {\n command: 'white',\n label: 'dashboard.addToWhitelist',\n icon: 'shield-alt',\n className: 'white'\n }, {\n command: 'delete',\n label: 'dashboard.delete',\n icon: 'trash-alt',\n className: 'danger'\n }]\n };\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n }\n },\n methods: {\n handleAction(command) {\n this.$emit('action', command);\n },\n handleClear() {\n this.$emit('clear');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchActionBar.vue?vue&type=template&id=49301bcc&scoped=true\"\nimport script from \"./BatchActionBar.vue?vue&type=script&lang=js\"\nexport * from \"./BatchActionBar.vue?vue&type=script&lang=js\"\n\nimport \"./BatchActionBar.vue?vue&type=style&index=0&id=49301bcc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-49301bcc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, withModifiers as _withModifiers, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_2 = [\"src\"];\nconst _hoisted_3 = [\"src\"];\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n class: \"filename-start\"\n};\nconst _hoisted_6 = {\n class: \"filename-end\"\n};\nconst _hoisted_7 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_9 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_10 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"channel-name-box\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_13 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_14 = {\n key: 0,\n class: \"address-box\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"list-item\",\n onTouchstart: _cache[10] || (_cache[10] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[11] || (_cache[11] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[12] || (_cache[12] = $event => _ctx.$emit('touchmove', $event))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.handleSelectChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), _createElementVNode(\"div\", {\n class: \"list-col list-col-preview\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [$options.isFolder ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"list-folder-icon\"\n })) : $options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: $props.fileLink,\n class: \"list-preview-img\",\n muted: \"\",\n preload: \"metadata\"\n }, null, 8, _hoisted_2)) : $options.isImage ? (_openBlock(), _createElementBlock(\"img\", {\n key: 2,\n src: $props.fileLink,\n class: \"list-preview-img\",\n loading: \"lazy\",\n decoding: \"async\"\n }, null, 8, _hoisted_3)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"list-file-icon\"\n }))]), _createElementVNode(\"div\", {\n class: \"list-col list-col-name\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [_createElementVNode(\"span\", {\n class: \"filename-ellipsis\",\n title: $options.displayName\n }, [_createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.fileNameStart), 1), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.fileNameEnd), 1)], 8, _hoisted_4)]), _createElementVNode(\"div\", _hoisted_7, [!$options.isFolder && $props.item.metadata?.Tags && $props.item.metadata.Tags.length > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.item.metadata.Tags.slice(0, 3), (tag, tagIndex) => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: tagIndex,\n class: \"color-tag\",\n style: _normalizeStyle({\n background: $options.getTagColor(tagIndex)\n })\n }, _toDisplayString(tag), 5);\n }), 128)), $props.item.metadata.Tags.length > 3 ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"color-tag color-tag-more\",\n style: _normalizeStyle({\n background: $options.getTagColor(3)\n })\n }, \"+\" + _toDisplayString($props.item.metadata.Tags.length - 3), 5)) : _createCommentVNode(\"\", true)], 64)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"-\"))]), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.isFolder ? '-' : $props.item.metadata?.Channel || $props.item.channelTag || '-'), 1), _createElementVNode(\"div\", _hoisted_10, [!$options.isFolder && $props.item.metadata?.ChannelName ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString($props.item.metadata.ChannelName), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))]), _createElementVNode(\"div\", _hoisted_13, [!$options.isFolder && $props.item.metadata?.UploadIP ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, _toDisplayString($props.item.metadata.UploadIP), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"-\"))]), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.isFolder ? '-' : $options.fileSizeDisplay), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.uploadDate), 1), _createElementVNode(\"div\", _hoisted_18, [!$options.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[6] || (_cache[6] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[7] || (_cache[7] = _withModifiers($event => _ctx.$emit('folderCopy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[8] || (_cache[8] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn list-action-danger\",\n onClick: _cache[9] || (_cache[9] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"content\"])])], 32);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FileListItem',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n default: ''\n }\n },\n emits: ['update:selected', 'enter', 'detail', 'copy', 'folderCopy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n tagColors: ['#f472b6', '#a78bfa', '#60a5fa', '#34d399']\n };\n },\n computed: {\n isFolder() {\n // 检查 isFolder 属性或名称以 / 结尾\n return this.item.isFolder || this.item.name?.endsWith('/');\n },\n isVideo() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isImage() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp');\n },\n displayName() {\n if (this.isFolder) {\n const parts = this.item.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.item.name;\n }\n return this.item.metadata?.FileName || this.getFileName(this.item.name);\n },\n fileNameStart() {\n const name = this.displayName;\n if (name.length <= 20) return name;\n return name.slice(0, -8);\n },\n fileNameEnd() {\n const name = this.displayName;\n if (name.length <= 20) return '';\n return name.slice(-8);\n },\n uploadDate() {\n if (this.item.uploaded) {\n return new Date(this.item.uploaded).toLocaleDateString();\n }\n if (this.item.metadata?.TimeStamp) {\n return new Date(this.item.metadata.TimeStamp).toLocaleDateString();\n }\n return '-';\n },\n fileSizeDisplay() {\n const sizeBytes = this.item.metadata?.FileSizeBytes;\n const sizeMB = this.item.metadata?.FileSize;\n if (sizeBytes) {\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(1)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return '-';\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n },\n methods: {\n handleSelectChange(value) {\n this.localSelected = value;\n this.$emit('update:selected', value);\n },\n handlePreviewClick() {\n if (this.isFolder) {\n this.$emit('enter');\n } else {\n this.$emit('detail');\n }\n },\n getFileName(name) {\n const parts = (name || '').split('/');\n return parts[parts.length - 1];\n },\n getTagColor(index) {\n return this.tagColors[index % this.tagColors.length];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileListItem.vue?vue&type=template&id=25a3242c&scoped=true\"\nimport script from \"./FileListItem.vue?vue&type=script&lang=js\"\nexport * from \"./FileListItem.vue?vue&type=script&lang=js\"\n\nimport \"./FileListItem.vue?vue&type=style&index=0&id=25a3242c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25a3242c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, withModifiers as _withModifiers, withCtx as _withCtx, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"file-short-info\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"success-tag\"\n};\nconst _hoisted_3 = {\n key: 1,\n class: \"fail-tag\"\n};\nconst _hoisted_4 = {\n key: 2,\n class: \"success-tag\"\n};\nconst _hoisted_5 = {\n key: 3,\n class: \"primary-tag\"\n};\nconst _hoisted_6 = {\n key: 0,\n style: {\n \"margin-left\": \"2px\"\n }\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"skeleton-wrapper\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = {\n class: \"error-text\"\n};\nconst _hoisted_11 = {\n key: 3,\n class: \"file-preview\"\n};\nconst _hoisted_12 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_13 = {\n class: \"file-name-row\"\n};\nconst _hoisted_14 = {\n class: \"file-name\"\n};\nconst _hoisted_15 = {\n class: \"action-bar\"\n};\nconst _hoisted_16 = {\n class: \"action-bar-left\"\n};\nconst _hoisted_17 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card\",\n onTouchstart: _cache[17] || (_cache[17] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[18] || (_cache[18] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[19] || (_cache[19] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", _hoisted_1, [$props.item.metadata?.ListType === 'White' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString($options.channelTag), 1)) : $props.item.metadata?.ListType === 'Block' || $props.item.metadata?.Label === 'adult' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString($options.channelTag), 1)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString($options.channelTag), 1)), $props.item.metadata?.Tags && $props.item.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [_createVNode(_component_font_awesome_icon, {\n icon: \"tag\",\n style: {\n \"margin-right\": \"3px\",\n \"font-size\": \"12px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString($props.item.metadata.Tags[0]) + \" \", 1), $props.item.metadata.Tags.length > 1 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \" (+\" + _toDisplayString($props.item.metadata.Tags.length - 1) + \") \", 1)) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)]), $options.isVideo ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [$data.videoLoading ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7)) : $data.videoError ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"error-wrapper\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])) : _createCommentVNode(\"\", true), _withDirectives(_createElementVNode(\"video\", {\n src: $props.fileLink,\n muted: \"\",\n loop: \"\",\n preload: \"metadata\",\n class: \"video-preview\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleVideoClick && $options.handleVideoClick(...args)),\n onMouseenter: _cache[4] || (_cache[4] = $event => $options.handleVideoHover($event, true)),\n onMouseleave: _cache[5] || (_cache[5] = $event => $options.handleVideoHover($event, false)),\n onFullscreenchange: _cache[6] || (_cache[6] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onWebkitfullscreenchange: _cache[7] || (_cache[7] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onLoadeddata: _cache[8] || (_cache[8] = $event => $data.videoLoading = false),\n onError: _cache[9] || (_cache[9] = (...args) => $options.handleVideoError && $options.handleVideoError(...args))\n }, null, 40, _hoisted_9), [[_vShow, !$data.videoLoading && !$data.videoError]])], 64)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-preview audio-card-preview\",\n onClick: _cache[10] || (_cache[10] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"music\",\n class: \"file-icon audio-icon\"\n })])) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n \"preview-teleported\": true,\n src: $props.fileLink,\n \"preview-src-list\": $props.previewSrcList,\n fit: \"cover\",\n lazy: \"\",\n decoding: \"async\",\n class: \"image-preview\"\n }, {\n placeholder: _withCtx(() => [...(_cache[20] || (_cache[20] = [_createElementVNode(\"div\", {\n class: \"skeleton-wrapper\"\n }, null, -1)]))]),\n error: _withCtx(() => [_createElementVNode(\"div\", {\n class: \"error-wrapper\",\n onClick: _cache[11] || (_cache[11] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"image\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])]),\n _: 1\n }, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, _toDisplayString($options.displayName), 1)]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.detail'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[12] || (_cache[12] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])]), _createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[13] || (_cache[13] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[14] || (_cache[14] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[15] || (_cache[15] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[16] || (_cache[16] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])])]),\n _: 1\n });\n}","export default {\n name: 'FileCard',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n required: true\n },\n previewSrcList: {\n type: Array,\n default: () => []\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'detail', 'copy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n videoLoading: true,\n videoError: false\n };\n },\n computed: {\n channelTag() {\n return this.item.channelTag || '';\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n displayName() {\n const fileName = this.item.metadata?.FileName || this.item.name || '';\n const parts = fileName.split('/');\n return parts[parts.length - 1];\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n },\n fileLink() {\n // 链接变化时重置加载状态\n this.videoLoading = true;\n this.videoError = false;\n }\n },\n methods: {\n handleVideoError() {\n this.videoLoading = false;\n this.videoError = true;\n },\n handleVideoClick(e) {\n const video = e.target;\n if (video.requestFullscreen) {\n video.requestFullscreen();\n } else if (video.webkitRequestFullscreen) {\n video.webkitRequestFullscreen();\n } else if (video.mozRequestFullScreen) {\n video.mozRequestFullScreen();\n } else if (video.msRequestFullscreen) {\n video.msRequestFullscreen();\n }\n },\n handleFullscreenChange(e) {\n const video = e.target;\n const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (isFullscreen) {\n // 进入全屏:取消静音和循环\n video.muted = false;\n video.loop = false;\n } else {\n // 退出全屏:恢复静音和循环,暂停并重置\n video.muted = true;\n video.loop = true;\n video.pause();\n video.currentTime = 0;\n }\n },\n handleVideoHover(e, isEnter) {\n const video = e.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileCard.vue?vue&type=template&id=956fb02e&scoped=true\"\nimport script from \"./FileCard.vue?vue&type=script&lang=js\"\nexport * from \"./FileCard.vue?vue&type=script&lang=js\"\n\nimport \"./FileCard.vue?vue&type=style&index=0&id=956fb02e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-956fb02e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_2 = {\n class: \"file-name-row\"\n};\nconst _hoisted_3 = {\n class: \"file-name\"\n};\nconst _hoisted_4 = {\n key: 0,\n class: \"action-bar\"\n};\nconst _hoisted_5 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card folder-card\",\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[8] || (_cache[8] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", {\n class: \"folder-icon\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('enter'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"folder-icon-svg\"\n })]), _createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($options.folderName), 1)]), $props.showActions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n class: \"action-bar-left\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n });\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FolderCard',\n props: {\n name: {\n type: String,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n showActions: {\n type: Boolean,\n default: true\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'enter', 'copy', 'move', 'delete', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected\n };\n },\n computed: {\n folderName() {\n const parts = this.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.name;\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FolderCard.vue?vue&type=template&id=534cf01b&scoped=true\"\nimport script from \"./FolderCard.vue?vue&type=script&lang=js\"\nexport * from \"./FolderCard.vue?vue&type=script&lang=js\"\n\nimport \"./FolderCard.vue?vue&type=style&index=0&id=534cf01b&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-534cf01b\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, createStaticVNode as _createStaticVNode } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return $props.type === 'card' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 0\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'skeleton-' + i,\n class: \"skeleton-card\"\n }, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"div\", {\n class: \"skeleton-image\"\n }, null, -1), _createElementVNode(\"div\", {\n class: \"skeleton-info\"\n }, [_createElementVNode(\"div\", {\n class: \"skeleton-text\"\n })], -1)]))]);\n }), 128)) : $props.type === 'list' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 1\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'list-skeleton-' + i,\n class: \"list-item skeleton-list-item\"\n }, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"

\", 10)]))]);\n }), 128)) : _createCommentVNode(\"\", true);\n}","export default {\n name: 'SkeletonLoader',\n props: {\n type: {\n type: String,\n default: 'card',\n validator: value => ['card', 'list'].includes(value)\n },\n count: {\n type: Number,\n default: 15\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SkeletonLoader.vue?vue&type=template&id=070880ec&scoped=true\"\nimport script from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\nexport * from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\n\nimport \"./SkeletonLoader.vue?vue&type=style&index=0&id=070880ec&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-070880ec\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withModifiers as _withModifiers, withKeys as _withKeys, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"aria-checked\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: _normalizeClass([\"dashboard-checkbox\", [`dashboard-checkbox--${$props.variant}`, {\n 'checked': $props.checked,\n 'indeterminate': $props.indeterminate && !$props.checked\n }]]),\n role: \"checkbox\",\n \"aria-checked\": $options.ariaChecked,\n tabindex: \"0\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args)),\n onKeydown: [_cache[1] || (_cache[1] = _withKeys(_withModifiers((...args) => $options.handleClick && $options.handleClick(...args), [\"prevent\"]), [\"enter\"])), _cache[2] || (_cache[2] = _withKeys(_withModifiers((...args) => $options.handleClick && $options.handleClick(...args), [\"prevent\"]), [\"space\"]))]\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.markIcon,\n class: \"dashboard-checkbox-mark\"\n }, null, 8, [\"icon\"])], 42, _hoisted_1);\n}","export default {\n name: 'DashboardCheckbox',\n props: {\n checked: {\n type: Boolean,\n default: false\n },\n indeterminate: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: 'breadcrumb',\n validator: value => ['breadcrumb'].includes(value)\n }\n },\n emits: ['click'],\n computed: {\n ariaChecked() {\n if (this.checked) return 'true';\n if (this.indeterminate) return 'mixed';\n return 'false';\n },\n markIcon() {\n return this.indeterminate && !this.checked ? 'minus' : 'check';\n }\n },\n methods: {\n handleClick(event) {\n this.$emit('click', event);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardCheckbox.vue?vue&type=template&id=3757bfa7&scoped=true\"\nimport script from \"./DashboardCheckbox.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardCheckbox.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardCheckbox.vue?vue&type=style&index=0&id=3757bfa7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3757bfa7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"el-dropdown-link filter-trigger\"\n};\nconst _hoisted_2 = {\n class: \"filter-section\"\n};\nconst _hoisted_3 = {\n class: \"filter-title\"\n};\nconst _hoisted_4 = {\n class: \"filter-options\"\n};\nconst _hoisted_5 = {\n class: \"filter-section\"\n};\nconst _hoisted_6 = {\n class: \"filter-title\"\n};\nconst _hoisted_7 = {\n class: \"filter-options\"\n};\nconst _hoisted_8 = {\n class: \"filter-section\"\n};\nconst _hoisted_9 = {\n class: \"filter-title\"\n};\nconst _hoisted_10 = {\n class: \"filter-options\"\n};\nconst _hoisted_11 = {\n class: \"filter-section\"\n};\nconst _hoisted_12 = {\n class: \"filter-title\"\n};\nconst _hoisted_13 = {\n class: \"filter-options\"\n};\nconst _hoisted_14 = {\n class: \"filter-section\"\n};\nconst _hoisted_15 = {\n class: \"filter-title\"\n};\nconst _hoisted_16 = {\n class: \"filter-options\"\n};\nconst _hoisted_17 = {\n key: 0,\n class: \"filter-section\"\n};\nconst _hoisted_18 = {\n class: \"filter-title\"\n};\nconst _hoisted_19 = {\n class: \"filter-options\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"channel-divider\"\n};\nconst _hoisted_21 = {\n class: \"channel-group-title\"\n};\nconst _hoisted_22 = {\n class: \"filter-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_badge = _resolveComponent(\"el-badge\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n return _openBlock(), _createBlock(_component_el_dropdown, {\n \"hide-on-click\": false,\n trigger: \"click\",\n class: \"filter-dropdown\",\n ref: \"dropdownRef\"\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"filter-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('filter.accessStatus')), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.accessStatus,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localFilters.accessStatus = $event),\n onChange: _cache[1] || (_cache[1] = $event => $options.handleFilterChange('accessStatus'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.accessStatusOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'accessStatus-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.$t('filter.blackWhiteList')), 1), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.listType,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.localFilters.listType = $event),\n onChange: _cache[3] || (_cache[3] = $event => $options.handleFilterChange('listType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.listTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'listType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('filter.reviewResult')), 1), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.label,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.localFilters.label = $event),\n onChange: _cache[5] || (_cache[5] = $event => $options.handleFilterChange('label'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.labelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'label-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, _toDisplayString(_ctx.$t('filter.fileType')), 1), _createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.fileType,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.localFilters.fileType = $event),\n onChange: _cache[7] || (_cache[7] = $event => $options.handleFilterChange('fileType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.fileTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'fileType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('filter.channelType')), 1), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channel,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.localFilters.channel = $event),\n onChange: _cache[9] || (_cache[9] = $event => $options.handleFilterChange('channel'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.channelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channel-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), $props.channelNameOptions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('filter.channelName')), 1), _createElementVNode(\"div\", _hoisted_19, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.localFilters.channelName = $event),\n onChange: _cache[11] || (_cache[11] = $event => $options.handleFilterChange('channelName'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedChannelNames, (group, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: 'group-' + group.type\n }, [index > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(group.typeLabel), 1), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.channels, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channelName-' + option.type + '-' + option.name,\n label: option.type + ':' + option.name\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.name), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))], 64);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_el_button, {\n size: \"small\",\n onClick: $options.clearFilters,\n disabled: $options.activeFilterCount === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('filter.clearFilters')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_1, [_createVNode(_component_el_badge, {\n value: $options.activeFilterCount,\n hidden: $options.activeFilterCount === 0,\n class: \"filter-badge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"filter\",\n class: \"header-icon\"\n })]),\n _: 1\n }, 8, [\"value\", \"hidden\"])])]),\n _: 1\n }, 512);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nexport default {\n name: 'FilterDropdown',\n props: {\n filters: {\n type: Object,\n default: () => ({\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'none'\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n })\n },\n channelNameOptions: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:filters', 'change'],\n data() {\n return {\n localFilters: {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n }\n };\n },\n computed: {\n // 访问状态选项(综合判断 ListType 和 Label)\n // 正常: ListType !== 'Block' && Label !== 'adult'\n // 已屏蔽: ListType === 'Block' || Label === 'adult'\n accessStatusOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.blocked'),\n value: 'blocked'\n }];\n },\n // 黑白名单选项(直接使用 ListType 字段值)\n listTypeOptions() {\n return [{\n label: this.$t('filter.whiteList'),\n value: 'White'\n }, {\n label: this.$t('filter.blackList'),\n value: 'Block'\n }, {\n label: this.$t('filter.notSet'),\n value: 'None'\n }];\n },\n // 审查结果选项\n labelOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.teenContent'),\n value: 'teen'\n }, {\n label: this.$t('filter.adultContent'),\n value: 'adult'\n }];\n },\n fileTypeOptions() {\n return [{\n label: this.$t('filter.image'),\n value: 'image'\n }, {\n label: this.$t('filter.video'),\n value: 'video'\n }, {\n label: this.$t('filter.audio'),\n value: 'audio'\n }, {\n label: this.$t('filter.other'),\n value: 'other'\n }];\n },\n channelOptions() {\n return [{\n label: 'Telegram',\n value: 'TelegramNew'\n }, {\n label: 'Cloudflare R2',\n value: 'CloudflareR2'\n }, {\n label: 'S3',\n value: 'S3'\n }, {\n label: 'Discord',\n value: 'Discord'\n }, {\n label: 'HuggingFace',\n value: 'HuggingFace'\n }, {\n label: 'WebDAV',\n value: 'WebDAV'\n }, {\n label: this.$t('filter.externalLink'),\n value: 'External'\n }];\n },\n activeFilterCount() {\n return Object.values(this.localFilters).reduce((count, arr) => count + arr.length, 0);\n },\n // 按类型分组渠道名称\n groupedChannelNames() {\n const groups = {};\n this.channelNameOptions.forEach(option => {\n if (!groups[option.type]) {\n groups[option.type] = {\n type: option.type,\n typeLabel: option.typeLabel,\n channels: []\n };\n }\n groups[option.type].channels.push(option);\n });\n return Object.values(groups);\n }\n },\n watch: {\n filters: {\n handler(newFilters) {\n this.localFilters = {\n accessStatus: Array.isArray(newFilters.accessStatus) ? [...newFilters.accessStatus] : [],\n listType: Array.isArray(newFilters.listType) ? [...newFilters.listType] : [],\n label: Array.isArray(newFilters.label) ? [...newFilters.label] : [],\n fileType: Array.isArray(newFilters.fileType) ? [...newFilters.fileType] : [],\n channel: Array.isArray(newFilters.channel) ? [...newFilters.channel] : [],\n channelName: Array.isArray(newFilters.channelName) ? [...newFilters.channelName] : []\n };\n },\n immediate: true,\n deep: true\n }\n },\n methods: {\n handleFilterChange(type) {\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type,\n filters: {\n ...this.localFilters\n }\n });\n },\n clearFilters() {\n this.localFilters = {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type: 'clear',\n filters: {\n ...this.localFilters\n }\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FilterDropdown.vue?vue&type=template&id=42919522&scoped=true\"\nimport script from \"./FilterDropdown.vue?vue&type=script&lang=js\"\nexport * from \"./FilterDropdown.vue?vue&type=script&lang=js\"\n\nimport \"./FilterDropdown.vue?vue&type=style&index=0&id=42919522&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-42919522\"]])\n\nexport default __exports__","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, withKeys as _withKeys, withCtx as _withCtx, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content admin-header-content\"\n};\nconst _hoisted_3 = {\n class: \"search-area\"\n};\nconst _hoisted_4 = {\n class: \"search-card\"\n};\nconst _hoisted_5 = {\n class: \"actions\"\n};\nconst _hoisted_6 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_7 = {\n class: \"breadcrumb-container\"\n};\nconst _hoisted_8 = [\"title\", \"aria-pressed\"];\nconst _hoisted_9 = [\"title\", \"aria-pressed\"];\nconst _hoisted_10 = [\"title\"];\nconst _hoisted_11 = {\n class: \"breadcrumb-sort-icon\",\n viewBox: \"0 0 30 18\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_12 = {\n key: 0,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_13 = {\n key: 1,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_14 = {\n key: 2,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_15 = {\n key: 3,\n class: \"sort-field-glyph\"\n};\nconst _hoisted_16 = {\n key: 4,\n class: \"sort-order-glyph\",\n d: \"M23 13.5V4.5M19 8.5L23 4.5L27 8.5\"\n};\nconst _hoisted_17 = {\n key: 5,\n class: \"sort-order-glyph\",\n d: \"M23 4.5V13.5M19 9.5L23 13.5L27 9.5\"\n};\nconst _hoisted_18 = {\n class: \"sort-order-wrapper\"\n};\nconst _hoisted_19 = {\n class: \"mobile-directory-path\"\n};\nconst _hoisted_20 = {\n class: \"breadcrumb desktop-only\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n key: 1,\n class: \"empty-state\"\n};\nconst _hoisted_23 = {\n class: \"empty-text\"\n};\nconst _hoisted_24 = {\n class: \"empty-hint\"\n};\nconst _hoisted_25 = {\n class: \"list-header\"\n};\nconst _hoisted_26 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_27 = {\n class: \"list-col list-col-preview\"\n};\nconst _hoisted_28 = {\n class: \"list-col list-col-name\"\n};\nconst _hoisted_29 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_30 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_31 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_32 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_33 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_34 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_35 = {\n class: \"list-col list-col-actions\"\n};\nconst _hoisted_36 = {\n key: 1,\n class: \"empty-state list-empty\"\n};\nconst _hoisted_37 = {\n class: \"empty-text\"\n};\nconst _hoisted_38 = {\n class: \"empty-hint\"\n};\nconst _hoisted_39 = {\n class: \"pagination-container\"\n};\nconst _hoisted_40 = {\n class: \"pagination-center\"\n};\nconst _hoisted_41 = {\n class: \"pagination-right\"\n};\nconst _hoisted_42 = {\n class: \"page-total\"\n};\nconst _hoisted_43 = {\n class: \"page-jump\"\n};\nconst _hoisted_44 = {\n class: \"dialog-section\"\n};\nconst _hoisted_45 = {\n class: \"section-header\"\n};\nconst _hoisted_46 = {\n class: \"section-title\"\n};\nconst _hoisted_47 = {\n class: \"section-content\"\n};\nconst _hoisted_48 = {\n class: \"dialog-section\"\n};\nconst _hoisted_49 = {\n class: \"section-header\"\n};\nconst _hoisted_50 = {\n class: \"section-title\"\n};\nconst _hoisted_51 = {\n class: \"section-content\"\n};\nconst _hoisted_52 = {\n class: \"setting-item\"\n};\nconst _hoisted_53 = {\n class: \"setting-label\"\n};\nconst _hoisted_54 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_55 = {\n class: \"setting-label\"\n};\nconst _hoisted_56 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_FilterDropdown = _resolveComponent(\"FilterDropdown\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_DashboardCheckbox = _resolveComponent(\"DashboardCheckbox\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_divider = _resolveComponent(\"el-divider\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_el_breadcrumb_item = _resolveComponent(\"el-breadcrumb-item\");\n const _component_el_breadcrumb = _resolveComponent(\"el-breadcrumb\");\n const _component_SkeletonLoader = _resolveComponent(\"SkeletonLoader\");\n const _component_FolderCard = _resolveComponent(\"FolderCard\");\n const _component_FileCard = _resolveComponent(\"FileCard\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_FileListItem = _resolveComponent(\"FileListItem\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_main = _resolveComponent(\"el-main\");\n const _component_el_container = _resolveComponent(\"el-container\");\n const _component_BatchActionBar = _resolveComponent(\"BatchActionBar\");\n const _component_FileDetailDialog = _resolveComponent(\"FileDetailDialog\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_TagManagementDialog = _resolveComponent(\"TagManagementDialog\");\n const _component_BatchTagDialog = _resolveComponent(\"BatchTagDialog\");\n const _component_MobileActionSheet = _resolveComponent(\"MobileActionSheet\");\n const _component_MobileDirectoryDrawer = _resolveComponent(\"MobileDirectoryDrawer\");\n const _component_MoveFileDialog = _resolveComponent(\"MoveFileDialog\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_container, null, {\n default: _withCtx(() => [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"dashboard\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.tempSearch,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.tempSearch = $event),\n size: \"small\",\n placeholder: _ctx.$t('dashboard.searchPlaceholder'),\n onKeyup: _withKeys($options.handleSearch, [\"enter\"])\n }, {\n suffix: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"search\",\n class: \"search-icon\",\n onClick: $options.handleSearch\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\"])]), _createVNode(_component_FilterDropdown, {\n filters: $data.filters,\n \"onUpdate:filters\": _cache[1] || (_cache[1] = $event => $data.filters = $event),\n channelNameOptions: $data.channelNameOptions,\n onChange: $options.handleFilterChange\n }, null, 8, [\"filters\", \"channelNameOptions\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.linkFormat'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"header-icon\",\n onClick: _cache[2] || (_cache[2] = $event => $data.showUrlDialog = true)\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.logout'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_el_main, {\n class: _normalizeClass([\"main-container\", {\n 'has-batch-toolbar': $data.selectedFiles.length > 0\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_DashboardCheckbox, {\n checked: $options.selectPage,\n indeterminate: $options.selectedPageFiles && !$options.selectPage,\n variant: \"breadcrumb\",\n onClick: $options.handleSelectPage\n }, null, 8, [\"checked\", \"indeterminate\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"breadcrumb-view-toggle\", {\n 'is-list': $data.viewMode === 'list'\n }]),\n role: \"group\"\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"breadcrumb-view-button\", {\n 'is-active': $data.viewMode === 'card'\n }]),\n type: \"button\",\n title: _ctx.$t('dashboard.cardView'),\n \"aria-pressed\": $data.viewMode === 'card',\n onClick: _cache[3] || (_cache[3] = $event => $options.setViewMode('card'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"th-large\",\n class: \"breadcrumb-view-icon\"\n })], 10, _hoisted_8), _createElementVNode(\"button\", {\n class: _normalizeClass([\"breadcrumb-view-button\", {\n 'is-active': $data.viewMode === 'list'\n }]),\n type: \"button\",\n title: _ctx.$t('dashboard.listView'),\n \"aria-pressed\": $data.viewMode === 'list',\n onClick: _cache[4] || (_cache[4] = $event => $options.setViewMode('list'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"list\",\n class: \"breadcrumb-view-icon\"\n })], 10, _hoisted_9)], 2), _createVNode(_component_el_dropdown, {\n trigger: \"click\",\n class: \"breadcrumb-sort-dropdown\",\n onCommand: $options.setSortField\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"sort-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_radio_group, {\n modelValue: $data.sortOrder,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.sortOrder = $event),\n size: \"small\",\n onChange: $options.setSortOrder\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"asc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortAsc')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"desc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortDesc')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])]), _createVNode(_component_el_divider, {\n class: \"sort-divider\"\n }), _createVNode(_component_el_dropdown_item, {\n command: \"time\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'time'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByTime')), 1), $data.sortField === 'time' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"size\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'size'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortBySize')), 1), $data.sortField === 'size' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"rawName\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'rawName'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByRawName')), 1), $data.sortField === 'rawName' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"]), _createVNode(_component_el_dropdown_item, {\n command: \"fileName\",\n class: _normalizeClass({\n 'is-selected': $data.sortField === 'fileName'\n })\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.sortByFileName')), 1), $data.sortField === 'fileName' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"sort-field-check\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"breadcrumb-sort-button\",\n type: \"button\",\n title: $options.sortLabel\n }, [(_openBlock(), _createElementBlock(\"svg\", _hoisted_11, [$data.sortField === 'time' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_12, [...(_cache[32] || (_cache[32] = [_createElementVNode(\"circle\", {\n cx: \"7.5\",\n cy: \"9\",\n r: \"5.5\"\n }, null, -1), _createElementVNode(\"path\", {\n d: \"M7.5 5.5V9L10 10.5\"\n }, null, -1)]))])) : $data.sortField === 'size' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_13, [...(_cache[33] || (_cache[33] = [_createElementVNode(\"path\", {\n d: \"M2 4H13M2 9H10M2 14H7\"\n }, null, -1)]))])) : $data.sortField === 'rawName' ? (_openBlock(), _createElementBlock(\"g\", _hoisted_14, [...(_cache[34] || (_cache[34] = [_createElementVNode(\"path\", {\n d: \"M5.5 3L4 15M11 3L9.5 15M2.5 7H13M2 11H12.5\"\n }, null, -1)]))])) : (_openBlock(), _createElementBlock(\"g\", _hoisted_15, [...(_cache[35] || (_cache[35] = [_createElementVNode(\"path\", {\n d: \"M2.5 14L7.5 3L12.5 14M4.3 10H10.7\"\n }, null, -1)]))])), $data.sortOrder === 'asc' ? (_openBlock(), _createElementBlock(\"path\", _hoisted_16)) : (_openBlock(), _createElementBlock(\"path\", _hoisted_17))]))], 8, _hoisted_10)]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: \"mobile-directory-trigger\",\n onClick: _cache[6] || (_cache[6] = $event => $data.showMobileDirectoryDrawer = true)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"mobile-directory-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, _toDisplayString($data.currentPath && $data.currentPath.split('/').filter(Boolean).length > 0 ? $data.currentPath.split('/').filter(Boolean).pop() : _ctx.$t('dashboard.rootDirectory')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"mobile-directory-arrow\"\n })]), _createElementVNode(\"div\", _hoisted_20, [_createVNode(_component_el_breadcrumb, {\n separator: \"/\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_breadcrumb_item, {\n onClick: _cache[7] || (_cache[7] = $event => $options.navigateToFolder(''))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"breadcrumb-home-icon\"\n })]),\n _: 1\n }), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentPath.split('/').filter(Boolean), (folder, index) => {\n return _openBlock(), _createBlock(_component_el_breadcrumb_item, {\n key: index,\n onClick: $event => $options.navigateToFolder($data.currentPath.split('/').filter(Boolean).slice(0, index + 1).join('/'))\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(folder), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))]),\n _: 1\n })]), _createElementVNode(\"span\", {\n class: \"stats-badge\",\n title: _ctx.$t('dashboard.totalFiles', {\n count: _ctx.$data.Number\n })\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"stats-badge-icon\"\n }), _createTextVNode(\" \" + _toDisplayString($data.Number), 1)], 8, _hoisted_21)]), $data.viewMode === 'card' ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"content\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"cardContainerRef\",\n onTouchstartPassive: _cache[8] || (_cache[8] = (...args) => $options.handlePageSwipeStart && $options.handlePageSwipeStart(...args)),\n onTouchendPassive: _cache[9] || (_cache[9] = (...args) => $options.handlePageSwipeEnd && $options.handlePageSwipeEnd(...args)),\n onTouchcancelPassive: _cache[10] || (_cache[10] = (...args) => $options.resetPageSwipe && $options.resetPageSwipe(...args))\n }, [$data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"card\",\n count: $data.pageSize\n }, null, 8, [\"count\"])) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_23, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_24, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: index\n }, [$options.isFolder(item) ? (_openBlock(), _createBlock(_component_FolderCard, {\n key: 0,\n name: item.name,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n showActions: !$data.isSearchMode,\n disableTooltip: $options.disableTooltip,\n onEnter: $event => $options.enterFolder(item.name),\n onCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onTouchstart: $event => $options.handleFolderTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"name\", \"selected\", \"onUpdate:selected\", \"showActions\", \"disableTooltip\", \"onEnter\", \"onCopy\", \"onMove\", \"onDelete\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"])) : (_openBlock(), _createBlock(_component_FileCard, {\n key: 1,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n previewSrcList: item.previewSrcList,\n disableTooltip: $options.disableTooltip,\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"previewSrcList\", \"disableTooltip\", \"onDetail\", \"onCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]))], 64);\n }), 128))], 34)) : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"list-view\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"listContainerRef\",\n onTouchstartPassive: _cache[12] || (_cache[12] = (...args) => $options.handlePageSwipeStart && $options.handlePageSwipeStart(...args)),\n onTouchendPassive: _cache[13] || (_cache[13] = (...args) => $options.handlePageSwipeEnd && $options.handlePageSwipeEnd(...args)),\n onTouchcancelPassive: _cache[14] || (_cache[14] = (...args) => $options.resetPageSwipe && $options.resetPageSwipe(...args))\n }, [_createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_el_checkbox, {\n \"model-value\": $options.isSelectAll,\n indeterminate: $options.isIndeterminate,\n onClick: _cache[11] || (_cache[11] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.handleSelectAllPage\n }, null, 8, [\"model-value\", \"indeterminate\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_27, _toDisplayString(_ctx.$t('dashboard.preview')), 1), _createElementVNode(\"div\", _hoisted_28, _toDisplayString(_ctx.$t('dashboard.fileName')), 1), _createElementVNode(\"div\", _hoisted_29, _toDisplayString(_ctx.$t('dashboard.tags')), 1), _createElementVNode(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('dashboard.channelType')), 1), _createElementVNode(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('dashboard.channelNameCol')), 1), _createElementVNode(\"div\", _hoisted_32, _toDisplayString(_ctx.$t('dashboard.uploadAddress')), 1), _createElementVNode(\"div\", _hoisted_33, _toDisplayString(_ctx.$t('dashboard.fileSize')), 1), _createElementVNode(\"div\", _hoisted_34, _toDisplayString(_ctx.$t('dashboard.uploadTime')), 1), _createElementVNode(\"div\", _hoisted_35, _toDisplayString(_ctx.$t('dashboard.actions')), 1)]), $data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"list\",\n count: $data.pageSize\n }, null, 8, [\"count\"])) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_37, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_38, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createBlock(_component_FileListItem, {\n key: index,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n onEnter: $event => $options.enterFolder(item.name),\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onFolderCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.isFolder(item) ? $options.handleFolderTouchStart(item, index) : $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"onEnter\", \"onDetail\", \"onCopy\", \"onFolderCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]);\n }), 128))], 34)), $setup.isDragging ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"drag-select-overlay\",\n style: _normalizeStyle({\n position: 'fixed',\n left: $setup.selectionRect.left + 'px',\n top: $setup.selectionRect.top + 'px',\n width: $setup.selectionRect.width + 'px',\n height: $setup.selectionRect.height + 'px'\n })\n }, null, 4)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $options.filteredTableData.length,\n \"page-size\": $data.pageSize,\n \"current-page\": $data.currentPage,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"page-size\", \"current-page\", \"pager-count\", \"onCurrentChange\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.refreshFileList,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync\",\n class: _normalizeClass({\n 'fa-spin': $data.refreshLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"]), $data.currentPage === Math.ceil($options.filteredTableData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_41, [_createElementVNode(\"span\", _hoisted_42, _toDisplayString(_ctx.$t('dashboard.totalPages', {\n count: $options.realTotalPages\n })), 1), _createElementVNode(\"div\", _hoisted_43, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.jumpTo')), 1), _createVNode(_component_el_input, {\n modelValue: $data.jumpPage,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.jumpPage = $event),\n size: \"small\",\n class: \"jump-input\",\n onKeyup: _withKeys($options.handleJumpPage, [\"enter\"])\n }, null, 8, [\"modelValue\", \"onKeyup\"]), _createVNode(_component_el_button, {\n size: \"small\",\n type: \"primary\",\n onClick: $options.handleJumpPage,\n class: \"jump-btn\"\n }, {\n default: _withCtx(() => [...(_cache[36] || (_cache[36] = [_createTextVNode(\"GO\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])])])])]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n }), _createVNode(_component_BatchActionBar, {\n \"selected-count\": $data.selectedFiles.length,\n onAction: $options.handleBatchAction,\n onClear: $options.clearSelection\n }, null, 8, [\"selected-count\", \"onAction\", \"onClear\"]), _createVNode(_component_FileDetailDialog, {\n modelValue: $data.showdetailDialog,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.showdetailDialog = $event),\n file: $data.detailFile,\n fileLink: $options.getFileLink($data.detailFile?.name),\n urls: $options.allUrl,\n onDownload: _cache[17] || (_cache[17] = $event => $options.handleDownload($data.detailFile?.name)),\n onTagManagement: _cache[18] || (_cache[18] = $event => $options.handleTagManagement($data.detailFile?.name)),\n onBlock: _cache[19] || (_cache[19] = $event => $options.handleBlock($data.detailFile?.name)),\n onWhite: _cache[20] || (_cache[20] = $event => $options.handleWhite($data.detailFile?.name)),\n onDelete: _cache[21] || (_cache[21] = $event => $options.handleDetailDelete($data.detailFile?.name)),\n onMetadataUpdated: $options.handleMetadataUpdated,\n onFileRenamed: $options.handleFileRenamed\n }, null, 8, [\"modelValue\", \"file\", \"fileLink\", \"urls\", \"onMetadataUpdated\", \"onFileRenamed\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('dashboard.linkFormat'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_44, [_createElementVNode(\"div\", _hoisted_45, [_createElementVNode(\"span\", _hoisted_46, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_47, [_createVNode(_component_el_radio_group, {\n modelValue: $data.defaultUrlFormat,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.defaultUrlFormat = $event),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"originUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"mdUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[37] || (_cache[37] = _createElementVNode(\"span\", null, \"Markdown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"htmlUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[38] || (_cache[38] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"bbUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[39] || (_cache[39] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"tgId\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"radio-icon\"\n }), _cache[40] || (_cache[40] = _createElementVNode(\"span\", null, \"TG File ID\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3Location\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.s3Link')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_48, [_createElementVNode(\"div\", _hoisted_49, [_createElementVNode(\"span\", _hoisted_50, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_51, [_createElementVNode(\"div\", _hoisted_52, [_createElementVNode(\"span\", _hoisted_53, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_54, [_createElementVNode(\"span\", _hoisted_55, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_56, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[25] || (_cache[25] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_TagManagementDialog, {\n modelValue: $data.showTagDialog,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.showTagDialog = $event),\n fileId: $data.currentTagFile,\n onTagsUpdated: $options.handleTagsUpdated\n }, null, 8, [\"modelValue\", \"fileId\", \"onTagsUpdated\"]), _createVNode(_component_BatchTagDialog, {\n modelValue: $data.showBatchTagDialog,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.showBatchTagDialog = $event),\n selectedFiles: $data.selectedFiles,\n onTagsUpdated: $options.handleBatchTagsUpdated\n }, null, 8, [\"modelValue\", \"selectedFiles\", \"onTagsUpdated\"]), _createVNode(_component_MobileActionSheet, {\n modelValue: $data.showMobileActionModal,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.showMobileActionModal = $event),\n title: $data.mobileActionIsFolder ? $options.getFolderName($data.mobileActionFile?.name || '') : $data.mobileActionFile?.metadata?.FileName || $options.getFileName($data.mobileActionFile?.name || ''),\n isFolder: $data.mobileActionIsFolder,\n onAction: $options.handleMobileAction\n }, null, 8, [\"modelValue\", \"title\", \"isFolder\", \"onAction\"]), _createVNode(_component_MobileDirectoryDrawer, {\n modelValue: $data.showMobileDirectoryDrawer,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.showMobileDirectoryDrawer = $event),\n currentPath: $data.currentPath,\n onNavigate: $options.navigateToFolder,\n onGoBack: $options.handleGoBack\n }, null, 8, [\"modelValue\", \"currentPath\", \"onNavigate\", \"onGoBack\"]), _createVNode(_component_MoveFileDialog, {\n modelValue: $data.showMoveDialog,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.showMoveDialog = $event),\n \"current-directory\": $data.currentPath,\n \"is-batch-move\": $data.isBatchMove,\n \"initial-path\": $data.moveTargetPath,\n onConfirm: $options.confirmMove\n }, null, 8, [\"modelValue\", \"current-directory\", \"is-batch-move\", \"initial-path\", \"onConfirm\"])]);\n}","// 文件管理器工具类\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { ElMessage } from 'element-plus';\r\nimport i18n from '@/locales';\r\n\r\nclass FileManager {\r\n constructor() {\r\n this.FILE_LIST_PATH = 'data/fileList.json';\r\n this.fileListCache = null;\r\n this.storageWarningShown = false;\r\n }\r\n\r\n // 从本地存储读取文件列表\r\n getLocalFileList() {\r\n const fileList = this.getMutableFileList();\r\n return {\r\n ...fileList,\r\n files: [...(fileList.files || [])],\r\n directories: [...(fileList.directories || [])],\r\n };\r\n }\r\n\r\n getMutableFileList() {\r\n if (this.fileListCache) {\r\n return this.fileListCache;\r\n }\r\n\r\n try {\r\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\r\n this.fileListCache = fileList ? JSON.parse(fileList) : this.createEmptyFileList();\r\n return this.fileListCache;\r\n } catch (error) {\r\n console.error('Error reading local file list:', error);\r\n this.fileListCache = this.createEmptyFileList();\r\n return this.fileListCache;\r\n }\r\n }\r\n\r\n // 更新内存缓存,并尽量持久化到 localStorage\r\n updateFileListCache(fileList) {\r\n this.fileListCache = fileList || this.createEmptyFileList();\r\n const persisted = this.persistFileListCache();\r\n\r\n return {\r\n cacheUpdated: true,\r\n persisted,\r\n };\r\n }\r\n\r\n persistFileListCache() {\r\n try {\r\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(this.fileListCache));\r\n return true;\r\n } catch (error) {\r\n this.handleStoragePersistError(error);\r\n return false;\r\n }\r\n }\r\n\r\n createEmptyFileList() {\r\n return { files: [], directories: [] };\r\n }\r\n\r\n handleStoragePersistError(error) {\r\n console.warn('File list is kept in memory because localStorage persistence failed:', error);\r\n\r\n try {\r\n localStorage.removeItem(this.FILE_LIST_PATH);\r\n } catch (removeError) {\r\n console.warn('Failed to remove stale file list cache:', removeError);\r\n }\r\n\r\n if (!this.storageWarningShown) {\r\n this.storageWarningShown = true;\r\n ElMessage.warning(i18n.global.t('dashboard.fileListMemoryCacheWarning'));\r\n }\r\n }\r\n\r\n // 添加新文件到列表\r\n addFile(newFile) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n fileList.files.push(newFile);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error adding file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件夹\r\n addFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n if (!fileList.directories.includes(folderName)) {\r\n fileList.directories.push(folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n }\r\n return false; // 文件夹已存在\r\n } catch (error) {\r\n console.error('Error adding folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 移动文件或文件夹\r\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n \r\n if (isFolder) {\r\n // 更新目录列表\r\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\r\n if (oldFolderIndex !== -1) {\r\n fileList.directories.splice(oldFolderIndex, 1);\r\n }\r\n\r\n } else {\r\n // 移动单个文件\r\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\r\n if (fileIndex !== -1) {\r\n // 从旧位置移除\r\n fileList.files.splice(fileIndex, 1);\r\n }\r\n\r\n }\r\n\r\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\r\n if (newPath.startsWith(currentPath)) {\r\n const pathArray = newPath.substring(currentPath.length).split('/');\r\n if (pathArray.length > 1) {\r\n const newFolder = currentPath + pathArray[0];\r\n if (!fileList.directories.includes(newFolder)) {\r\n fileList.directories.push(newFolder);\r\n }\r\n }\r\n }\r\n\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error moving file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件\r\n removeFile(fileName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => file.name !== fileName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\r\n removeFolder(folderName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\r\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 获取指定目录下的文件和子目录\r\n getFilesInFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\r\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\r\n return { files, directories: subdirectories };\r\n } catch (error) {\r\n console.error('Error getting files in folder:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 构建筛选参数URL\r\n buildFilterParams(filters) {\r\n let params = '';\r\n // 访问状态筛选(综合判断)\r\n if (filters.accessStatus && filters.accessStatus.length > 0) {\r\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\r\n }\r\n // 黑白名单筛选(直接使用 ListType 字段)\r\n if (filters.listType && filters.listType.length > 0) {\r\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\r\n }\r\n if (filters.label && filters.label.length > 0) {\r\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\r\n }\r\n if (filters.fileType && filters.fileType.length > 0) {\r\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\r\n }\r\n if (filters.channel && filters.channel.length > 0) {\r\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\r\n }\r\n if (filters.channelName && filters.channelName.length > 0) {\r\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\r\n }\r\n return params;\r\n }\r\n\r\n // 更新文件列表\r\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\r\n search = search.trim();\r\n try {\r\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n \r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n const newFileList = await response.json();\r\n if (!newFileList.isIndexedResponse) {\r\n ElMessage.warning(i18n.global.t('dashboard.indexingWarning'));\r\n }\r\n // 保存包含新字段的完整数据\r\n return this.updateFileListCache(newFileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error refreshing file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 读取更多数据\r\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\r\n search = search.trim();\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const start = fileList.files.length;\r\n\r\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n\r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n \r\n const moreFiles = await response.json();\r\n fileList.files.push(...moreFiles.files);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error loading more files:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n}\r\n\r\nexport const fileManager = new FileManager();\r\n","/**\r\n * 矩形工具函数\r\n * 用于框选(rubber-band selection)功能中的矩形计算和相交检测\r\n */\r\n\r\n/**\r\n * 判断两个矩形是否相交\r\n * @param {Object} rectA - { left, top, right, bottom }\r\n * @param {Object} rectB - { left, top, right, bottom }\r\n * @returns {boolean} 是否存在重叠区域\r\n */\r\nexport function rectIntersects(rectA, rectB) {\r\n return !(\r\n rectA.right <= rectB.left ||\r\n rectA.left >= rectB.right ||\r\n rectA.bottom <= rectB.top ||\r\n rectA.top >= rectB.bottom\r\n );\r\n}\r\n\r\n/**\r\n * 根据起始点和当前点计算选区矩形\r\n * @param {Object} start - { x, y } 起始鼠标坐标\r\n * @param {Object} current - { x, y } 当前鼠标坐标\r\n * @returns {Object} { left, top, width, height, right, bottom }\r\n */\r\nexport function calcSelectionRect(start, current) {\r\n const left = Math.min(start.x, current.x);\r\n const top = Math.min(start.y, current.y);\r\n const width = Math.abs(current.x - start.x);\r\n const height = Math.abs(current.y - start.y);\r\n return { left, top, width, height, right: left + width, bottom: top + height };\r\n}\r\n","import { ref, watch, onMounted, onBeforeUnmount, toValue } from 'vue';\r\nimport { rectIntersects, calcSelectionRect } from './rectIntersects.js';\r\n\r\n/**\r\n * Vue 3 Composable:框选(rubber-band selection)核心逻辑,支持多视图模式\r\n *\r\n * @param {Object} options\r\n * @param {Object} options.modes - Per-view-mode configuration\r\n * @param {Object} options.modes.card - Card view config\r\n * @param {import('vue').Ref} options.modes.card.containerRef\r\n * @param {string} options.modes.card.itemSelector - e.g. '.img-card'\r\n * @param {Object} options.modes.list - List view config\r\n * @param {import('vue').Ref} options.modes.list.containerRef\r\n * @param {string} options.modes.list.itemSelector - e.g. '.list-item'\r\n * @param {string} [options.mainSelector='.main-container'] - 主内容区域的 CSS 选择器,框选只能从该区域内开始\r\n * @param {import('vue').Ref} options.viewMode - 当前视图模式\r\n * @param {import('vue').Ref} options.items - 当前页的数据项(paginatedTableData)\r\n * @returns {{ isDragging: import('vue').Ref, selectionRect: import('vue').Ref }}\r\n */\r\nexport function useDragSelect(options) {\r\n const {\r\n modes,\r\n mainSelector = '.main-container',\r\n viewMode,\r\n items,\r\n } = options;\r\n\r\n // --- Reactive state ---\r\n const isDragging = ref(false);\r\n const selectionRect = ref({ left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 });\r\n\r\n // --- Internal (non-reactive) state ---\r\n let startPoint = null; // { x, y } viewport coordinates at mousedown\r\n let preSelectSnapshot = []; // boolean[] snapshot of items[i].selected before drag\r\n let isAppendMode = false; // whether Shift/Ctrl/Cmd was held at mousedown\r\n\r\n // --- Enable/disable state ---\r\n const MOBILE_BREAKPOINT = 768; // px – at or below this width, drag-select is disabled\r\n let listenerAttached = false; // tracks whether the container mousedown listener is active\r\n\r\n // --- Auto-scroll state ---\r\n const EDGE_THRESHOLD = 50; // px from viewport edge to trigger auto-scroll\r\n const SCROLL_SPEED = 10; // px per frame to scroll\r\n let autoScrollTimer = null; // requestAnimationFrame ID for auto-scroll\r\n\r\n // --- Text selection prevention state ---\r\n let savedUserSelect = ''; // saved document.body.style.userSelect before drag\r\n\r\n // ------------------------------------------------------------------\r\n // Mode resolution helper\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Returns the configuration for the current viewMode.\r\n * @returns {{ containerRef: import('vue').Ref, itemSelector: string } | undefined}\r\n */\r\n function getActiveConfig() {\r\n const mode = toValue(viewMode);\r\n return modes[mode] || undefined;\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Enable / disable helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Determine whether drag-select should be enabled.\r\n * Returns true when viewMode is 'card' or 'list' AND window width > 768px.\r\n */\r\n function shouldEnable() {\r\n const mode = toValue(viewMode);\r\n return (mode === 'card' || mode === 'list') && window.innerWidth > MOBILE_BREAKPOINT;\r\n }\r\n\r\n /**\r\n * Conditionally attach or detach the container listener based on shouldEnable().\r\n * Also cancels any active drag when detaching.\r\n */\r\n function syncListenerState() {\r\n if (shouldEnable()) {\r\n if (!listenerAttached) {\r\n attachContainerListener();\r\n }\r\n } else {\r\n if (listenerAttached) {\r\n cancelDrag();\r\n detachContainerListener();\r\n }\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * 判断 mousedown 目标是否为可启动框选的空白区域。\r\n * 必须在主内容区域内,且不在卡片、交互元素上。\r\n */\r\n function isBlankArea(event) {\r\n const target = event.target;\r\n // 必须在主内容区域(el-main)内\r\n const mainArea = target.closest(mainSelector);\r\n if (!mainArea) return false;\r\n // 排除当前模式的可选元素\r\n const config = getActiveConfig();\r\n if (config) {\r\n const itemEl = target.closest(config.itemSelector);\r\n if (itemEl) {\r\n const container = toValue(config.containerRef);\r\n if (container && container.contains(itemEl)) {\r\n return false;\r\n }\r\n }\r\n }\r\n // 排除交互元素(按钮、输入框、链接、下拉菜单、分页等)\r\n const interactive = target.closest('button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container');\r\n if (interactive) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Determine whether a modifier key for append-select is pressed.\r\n */\r\n function hasAppendModifier(event) {\r\n return event.shiftKey || event.ctrlKey || event.metaKey;\r\n }\r\n\r\n /**\r\n * Save a snapshot of the current selected state for all items.\r\n */\r\n function saveSnapshot() {\r\n const currentItems = toValue(items);\r\n preSelectSnapshot = currentItems.map((item) => !!item.selected);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Auto-scroll helpers\r\n // ------------------------------------------------------------------\r\n\r\n /** The last known clientY during a drag – updated by onMouseMove. */\r\n let lastClientY = 0;\r\n\r\n /**\r\n * Start the auto-scroll loop. On each animation frame we check whether the\r\n * mouse is within EDGE_THRESHOLD of the top or bottom of the viewport and\r\n * scroll accordingly. The selection rectangle and card hit-testing are also\r\n * updated after each scroll step so the visual feedback stays in sync.\r\n */\r\n function startAutoScroll() {\r\n if (autoScrollTimer !== null) return; // already running\r\n\r\n function scrollStep() {\r\n const viewportHeight = window.innerHeight;\r\n let scrollDelta = 0;\r\n\r\n if (lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n // Near bottom edge → scroll down\r\n scrollDelta = SCROLL_SPEED;\r\n } else if (lastClientY <= EDGE_THRESHOLD) {\r\n // Near top edge → scroll up\r\n scrollDelta = -SCROLL_SPEED;\r\n }\r\n\r\n if (scrollDelta !== 0) {\r\n window.scrollBy(0, scrollDelta);\r\n\r\n // After scrolling, the viewport-relative positions of cards change,\r\n // but the mouse hasn't moved. We need to adjust the start point so\r\n // the selection rectangle accounts for the scroll offset, then\r\n // re-run hit-testing.\r\n if (startPoint) {\r\n startPoint.y -= scrollDelta;\r\n selectionRect.value = calcSelectionRect(startPoint, { x: selectionRect.value.right >= startPoint.x ? selectionRect.value.right : selectionRect.value.left, y: lastClientY });\r\n updateSelection();\r\n }\r\n }\r\n\r\n // Continue the loop\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n /**\r\n * Stop the auto-scroll loop and clean up the timer.\r\n */\r\n function stopAutoScroll() {\r\n if (autoScrollTimer !== null) {\r\n cancelAnimationFrame(autoScrollTimer);\r\n autoScrollTimer = null;\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Text selection prevention helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Disable text selection on the document body during drag.\r\n */\r\n function disableTextSelection() {\r\n savedUserSelect = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n }\r\n\r\n /**\r\n * Restore the original text selection behavior on the document body.\r\n */\r\n function restoreTextSelection() {\r\n document.body.style.userSelect = savedUserSelect;\r\n }\r\n\r\n /**\r\n * Update the selected state of every item based on the current selection rectangle.\r\n */\r\n function updateSelection() {\r\n const config = getActiveConfig();\r\n if (!config) return;\r\n\r\n const container = toValue(config.containerRef);\r\n if (!container) return;\r\n\r\n const currentItems = toValue(items);\r\n const rect = selectionRect.value;\r\n\r\n // Build the selection rect in {left, top, right, bottom} format for intersection test\r\n const selRect = {\r\n left: rect.left,\r\n top: rect.top,\r\n right: rect.right,\r\n bottom: rect.bottom,\r\n };\r\n\r\n // Query all item DOM elements inside the container using the active mode's selector\r\n const itemElements = container.querySelectorAll(config.itemSelector);\r\n\r\n // Iterate over items and corresponding DOM elements\r\n currentItems.forEach((item, index) => {\r\n const itemEl = itemElements[index];\r\n if (!itemEl) return;\r\n\r\n const itemRect = itemEl.getBoundingClientRect();\r\n const itemBounds = {\r\n left: itemRect.left,\r\n top: itemRect.top,\r\n right: itemRect.right,\r\n bottom: itemRect.bottom,\r\n };\r\n\r\n const intersects = rectIntersects(selRect, itemBounds);\r\n\r\n if (isAppendMode) {\r\n // Append mode: keep original state, toggle on if intersects\r\n // If originally selected, stay selected regardless\r\n // If not originally selected, select if intersects\r\n if (preSelectSnapshot[index]) {\r\n item.selected = true;\r\n } else {\r\n item.selected = intersects;\r\n }\r\n } else {\r\n // Non-append mode: selected = intersects only\r\n item.selected = intersects;\r\n }\r\n });\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Mouse event handlers\r\n // ------------------------------------------------------------------\r\n\r\n function onMouseDown(event) {\r\n // 仅响应鼠标左键\r\n if (event.button !== 0) return;\r\n\r\n // 点击在卡片上时不启动框选\r\n if (!isBlankArea(event)) return;\r\n\r\n // Record start point (viewport coordinates)\r\n startPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Determine append mode from modifier keys at the moment of mousedown\r\n isAppendMode = hasAppendModifier(event);\r\n\r\n // 保存选中状态快照\r\n saveSnapshot();\r\n\r\n // 非追加模式下先清除所有选中\r\n if (!isAppendMode) {\r\n const currentItems = toValue(items);\r\n currentItems.forEach((item) => {\r\n item.selected = false;\r\n });\r\n }\r\n\r\n // Start dragging\r\n isDragging.value = true;\r\n selectionRect.value = calcSelectionRect(startPoint, startPoint);\r\n\r\n // 防止文本选中\r\n disableTextSelection();\r\n\r\n // Attach document-level listeners for move and up\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(event) {\r\n if (!isDragging.value || !startPoint) return;\r\n\r\n const currentPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Track last clientY for auto-scroll\r\n lastClientY = event.clientY;\r\n\r\n // Update selection rectangle\r\n selectionRect.value = calcSelectionRect(startPoint, currentPoint);\r\n\r\n // Update card selection based on intersection\r\n updateSelection();\r\n\r\n // Start or continue auto-scroll if near viewport edges\r\n const viewportHeight = window.innerHeight;\r\n if (lastClientY <= EDGE_THRESHOLD || lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n startAutoScroll();\r\n } else {\r\n stopAutoScroll();\r\n }\r\n }\r\n\r\n function onMouseUp(_event) {\r\n if (!isDragging.value) return;\r\n\r\n // 停止自动滚动\r\n stopAutoScroll();\r\n\r\n // 恢复文本选中\r\n restoreTextSelection();\r\n\r\n // End dragging\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n\r\n // Clean up document-level listeners\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Lifecycle: attach / detach container listener\r\n // ------------------------------------------------------------------\r\n\r\n function attachContainerListener() {\r\n if (!listenerAttached) {\r\n document.addEventListener('mousedown', onMouseDown);\r\n listenerAttached = true;\r\n }\r\n }\r\n\r\n function detachContainerListener() {\r\n if (listenerAttached) {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n listenerAttached = false;\r\n }\r\n }\r\n\r\n /**\r\n * Force-stop any in-progress drag (e.g. when viewMode changes).\r\n */\r\n function cancelDrag() {\r\n if (isDragging.value) {\r\n stopAutoScroll();\r\n restoreTextSelection();\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n }\r\n\r\n // 监听 viewMode 变化,启用/禁用框选\r\n // Always cancel any in-progress drag when viewMode changes (Requirement 2.3),\r\n // then re-evaluate whether listeners should be attached for the new mode.\r\n watch(\r\n () => toValue(viewMode),\r\n () => {\r\n cancelDrag();\r\n syncListenerState();\r\n }\r\n );\r\n\r\n // --- Window resize handler ---\r\n function onWindowResize() {\r\n syncListenerState();\r\n }\r\n\r\n onMounted(() => {\r\n // 仅在满足条件时启用\r\n if (shouldEnable()) {\r\n attachContainerListener();\r\n }\r\n // Always listen for resize to dynamically enable/disable\r\n window.addEventListener('resize', onWindowResize);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n cancelDrag();\r\n restoreTextSelection();\r\n stopAutoScroll();\r\n detachContainerListener();\r\n window.removeEventListener('resize', onWindowResize);\r\n });\r\n\r\n return {\r\n isDragging,\r\n selectionRect,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport { mapGetters } from 'vuex';\nimport JSZip from 'jszip';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport TagManagementDialog from '@/components/dashboard/TagManagementDialog.vue';\nimport BatchTagDialog from '@/components/dashboard/BatchTagDialog.vue';\nimport SkeletonLoader from '@/components/dashboard/SkeletonLoader.vue';\nimport FileCard from '@/components/dashboard/FileCard.vue';\nimport FolderCard from '@/components/dashboard/FolderCard.vue';\nimport MoveFileDialog from '@/components/dashboard/MoveFileDialog.vue';\nimport FileListItem from '@/components/dashboard/FileListItem.vue';\nimport FileDetailDialog from '@/components/dashboard/FileDetailDialog.vue';\nimport BatchActionBar from '@/components/dashboard/BatchActionBar.vue';\nimport MobileActionSheet from '@/components/dashboard/MobileActionSheet.vue';\nimport MobileDirectoryDrawer from '@/components/dashboard/MobileDirectoryDrawer.vue';\nimport DashboardCheckbox from '@/components/dashboard/DashboardCheckbox.vue';\nimport FilterDropdown from '@/components/dashboard/FilterDropdown.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nimport { fileManager } from '@/utils/fileManager';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFolderPath } from '@/utils/pathValidator';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport { ref } from 'vue';\nimport { useDragSelect } from '@/utils/dashboard/useDragSelect.js';\nconst SORT_FIELDS = ['time', 'size', 'rawName', 'fileName'];\nconst SORT_ORDERS = ['asc', 'desc'];\nfunction getStoredSortValue(key, validValues, fallback) {\n try {\n const value = localStorage.getItem(key);\n return validValues.includes(value) ? value : fallback;\n } catch {\n return fallback;\n }\n}\nexport default {\n name: 'AdminDashBoard',\n mixins: [backgroundManager],\n data() {\n return {\n Number: 0,\n directFileCount: 0,\n // 当前目录直接子文件数量\n directFolderCount: 0,\n // 当前目录直接子文件夹数量\n showLogoutButton: false,\n tableData: [],\n tempSearch: '',\n search: '',\n searchKeywords: '',\n // Keywords only (without tag filters) for backend search\n searchIncludeTags: '',\n // 包含的标签,逗号分隔\n searchExcludeTags: '',\n // 排除的标签,逗号分隔\n isSearchMode: false,\n currentPage: 1,\n pageSize: 15,\n selectedFiles: [],\n sortField: getStoredSortValue('sortField', SORT_FIELDS, 'time'),\n sortOrder: getStoredSortValue('sortOrder', SORT_ORDERS, 'desc'),\n isUploading: false,\n showdetailDialog: false,\n detailFile: null,\n activeUrlTab: 'originUrl',\n defaultUrlFormat: 'originUrl',\n showUrlDialog: false,\n useCustomUrl: 'false',\n // 是否启用自定义链接\n customUrlPrefix: '',\n // 自定义链接前缀\n loading: false,\n // 加载状态\n currentPath: '',\n // 当前文件夹路径\n refreshLoading: false,\n showTagDialog: false,\n // 标签管理对话框\n showBatchTagDialog: false,\n // 批量标签管理对话框\n currentTagFile: '',\n // 当前标签管理的文件\n viewMode: 'card',\n // 视图模式:card 或 list\n showMobileActionModal: false,\n // 移动端操作模态框\n mobileActionFile: null,\n // 当前移动端操作的文件\n mobileActionIndex: -1,\n // 当前移动端操作的文件索引\n mobileActionIsFolder: false,\n // 是否为文件夹操作\n longPressTimer: null,\n // 长按计时器\n showMobileDirectoryDrawer: false,\n // 移动端目录抽屉\n jumpPage: '',\n // 跳转页码输入\n // 筛选相关状态(数组形式支持多选)\n filters: {\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'None'\n label: [],\n // 审查结果: 'normal', 'teen', 'adult'\n fileType: [],\n // 文件类型: 'image', 'video', 'audio', 'other'\n channel: [],\n // 渠道类型: 'TelegramNew', 'CloudflareR2', 'S3', 'Discord', 'HuggingFace', 'WebDAV', 'External'\n channelName: [] // 渠道名称: 动态获取\n },\n channelNameOptions: [],\n // 动态从文件列表中提取\n // 移动文件对话框相关状态\n showMoveDialog: false,\n // 移动文件对话框\n moveTargetPath: '/',\n // 移动目标路径\n moveFileKey: '',\n // 当前移动的文件key\n moveFileIndex: -1,\n // 当前移动的文件索引\n isBatchMove: false,\n // 是否为批量移动\n pageSwipeStartX: null,\n pageSwipeStartY: null,\n pageSwipeStartTime: 0\n };\n },\n components: {\n DashboardTabs,\n TagManagementDialog,\n BatchTagDialog,\n SkeletonLoader,\n FileCard,\n FolderCard,\n FileListItem,\n FileDetailDialog,\n BatchActionBar,\n MobileActionSheet,\n MobileDirectoryDrawer,\n DashboardCheckbox,\n FilterDropdown,\n MoveFileDialog,\n LanguageSwitcher\n },\n setup() {\n const cardContainerRef = ref(null);\n const listContainerRef = ref(null);\n const viewModeRef = ref('card');\n const itemsRef = ref([]);\n const {\n isDragging,\n selectionRect\n } = useDragSelect({\n modes: {\n card: {\n containerRef: cardContainerRef,\n itemSelector: '.img-card'\n },\n list: {\n containerRef: listContainerRef,\n itemSelector: '.list-item'\n }\n },\n viewMode: viewModeRef,\n items: itemsRef\n });\n return {\n cardContainerRef,\n listContainerRef,\n viewModeRef,\n itemsRef,\n isDragging,\n selectionRect\n };\n },\n computed: {\n ...mapGetters(['adminUrlSettings', 'userConfig']),\n filteredTableData() {\n return this.tableData;\n },\n totalPages() {\n return Math.ceil(this.filteredTableData.length / this.pageSize) || 1;\n },\n // 基于当前文件夹直接子文件和子文件夹数量计算的真实总页数\n realTotalPages() {\n const total = this.directFolderCount + this.directFileCount;\n return Math.ceil(total / this.pageSize) || 1;\n },\n // 计算当前激活的筛选条件数量(数组形式)\n activeFilterCount() {\n return Object.values(this.filters).reduce((count, arr) => count + (Array.isArray(arr) ? arr.length : 0), 0);\n },\n // 判断是否处于搜索或筛选模式\n hasSearchOrFilter() {\n return this.isSearchMode || this.activeFilterCount > 0;\n },\n paginatedTableData() {\n const sortedData = this.sortData(this.filteredTableData);\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n let data = sortedData.slice(start, end);\n // 增加previewSrcList属性,用于预览图片\n const fullList = data.filter(file => this.isImage(file)).map(file => this.getFileLink(file.name));\n data.forEach(file => {\n if (this.isImage(file)) {\n // 重新排序,索引大于等于当前索引的元素在前,否则在后\n file.previewSrcList = fullList.slice(fullList.indexOf(this.getFileLink(file.name))).concat(fullList.slice(0, fullList.indexOf(this.getFileLink(file.name))));\n }\n });\n // 增加channelTag属性,用于显示渠道信息\n data.forEach(file => {\n if (file.metadata?.Channel === 'TelegramNew' || file.metadata?.Channel === 'Telegram') {\n file.channelTag = 'TG';\n } else if (file.metadata?.Channel === 'CloudflareR2') {\n file.channelTag = 'R2';\n } else if (file.metadata?.Channel === 'S3') {\n file.channelTag = 'S3';\n } else if (file.metadata?.Channel === 'Discord') {\n file.channelTag = 'DC';\n } else if (file.metadata?.Channel === 'HuggingFace') {\n file.channelTag = 'HF';\n } else if (file.metadata?.Channel === 'WebDAV') {\n file.channelTag = 'WD';\n } else if (file.metadata?.Channel === 'External') {\n file.channelTag = this.$t('dashboard.externalTag');\n } else {\n file.channelTag = this.$t('dashboard.unknownTag');\n }\n });\n return data;\n },\n sortLabel() {\n const labelKeys = {\n time: 'dashboard.sortByTime',\n size: 'dashboard.sortBySize',\n rawName: 'dashboard.sortByRawName',\n fileName: 'dashboard.sortByFileName'\n };\n const fieldLabel = this.$t(labelKeys[this.sortField] || labelKeys.time);\n const orderLabel = this.$t(this.sortOrder === 'desc' ? 'dashboard.sortDesc' : 'dashboard.sortAsc');\n return `${fieldLabel} · ${orderLabel}`;\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n detailDialogWidth() {\n return window.innerWidth > 768 ? '70%' : '90%';\n },\n accessType() {\n if (this.detailFile?.metadata?.ListType === 'White') {\n return this.$t('filter.normal');\n } else if (this.detailFile?.metadata?.ListType === 'Block' || this.detailFile?.metadata?.Label === 'adult') {\n return this.$t('filter.blocked');\n } else {\n return this.$t('filter.normal');\n }\n },\n allUrl() {\n // 外链图片均采用外链\n if (this.detailFile?.metadata?.Channel === 'External') {\n return {\n 'originUrl': `${this.detailFile?.metadata?.ExternalLink}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n } else {\n return {\n 'originUrl': `${this.rootUrl}${this.detailFile?.name}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.rootUrl}${this.detailFile?.name}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n }\n },\n tableColumnNum() {\n return window.innerWidth > 768 ? 3 : 1;\n },\n tablePreviewSpan() {\n return window.innerWidth > 768 ? 2 : 1;\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n selectPage() {\n // 如果当前页所有文件都被选中,则返回 true,否则返回 false\n return this.paginatedTableData.every(file => file.selected);\n },\n selectedPageFiles() {\n // 如果当前页有文件被选中,则返回 true,否则返回 false\n return this.paginatedTableData.some(file => file.selected);\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.userConfig?.urlPrefix || `${document.location.origin}/file/`;\n },\n isSelectAll: {\n get() {\n return this.paginatedTableData.length > 0 && this.paginatedTableData.every(file => file.selected);\n },\n set(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n }\n },\n isIndeterminate() {\n const selectedCount = this.paginatedTableData.filter(file => file.selected).length;\n return selectedCount > 0 && selectedCount < this.paginatedTableData.length;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 5 : 7;\n }\n },\n watch: {\n // Sync viewMode data property to the ref used by useDragSelect\n viewMode: {\n handler(newVal) {\n this.viewModeRef = newVal;\n },\n immediate: true\n },\n // Sync paginatedTableData computed property to the ref used by useDragSelect\n paginatedTableData: {\n handler(newVal) {\n this.itemsRef = newVal;\n },\n immediate: true\n },\n tableData: {\n handler(newData) {\n // selectedFiles 增加 newData中新选中,不包含在 selectedFiles 中的文件\n this.selectedFiles = this.selectedFiles.concat(newData.filter(file => file.selected && !this.selectedFiles.includes(file)));\n // selectedFiles 删掉 newData 中已取消选中的文件\n this.selectedFiles = this.selectedFiles.filter(file => file.selected);\n // selectedFiles 删掉 tableData 中已删除的文件\n this.selectedFiles = this.selectedFiles.filter(file => newData.includes(file));\n },\n deep: true\n },\n defaultUrlFormat(newFormat) {\n localStorage.setItem('defaultUrlFormat', newFormat);\n },\n showdetailDialog(newVal) {\n if (newVal) {\n this.activeUrlTab = this.defaultUrlFormat || 'originUrl';\n }\n },\n customUrlPrefix(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n currentPath(val) {\n // 页面切换时,取消选择的内容\n this.tableData.forEach(file => file.selected = false);\n }\n },\n methods: {\n // 切换视图模式\n setViewMode(mode) {\n if (this.viewMode === mode) {\n return;\n }\n this.viewMode = mode;\n localStorage.setItem('viewMode', this.viewMode);\n },\n // 列表视图全选当前页\n handleSelectAllPage(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n },\n // 移动端长按开始\n handleTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = false;\n this.showMobileActionModal = true;\n }, 500); // 500ms 长按触发\n },\n // 移动端长按结束/取消\n handleTouchEnd() {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n },\n // 文件夹长按开始\n handleFolderTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = true;\n this.showMobileActionModal = true;\n }, 500);\n },\n // 处理移动端操作\n handleMobileAction(action) {\n const file = this.mobileActionFile;\n const index = this.mobileActionIndex;\n this.showMobileActionModal = false;\n if (!file) return;\n switch (action) {\n case 'detail':\n this.openDetailDialog(index, file.name);\n break;\n case 'copy':\n this.handleCopy(index, file.name);\n break;\n case 'folderCopy':\n this.handleFolderCopy(file.name);\n break;\n case 'download':\n this.handleDownload(file.name);\n break;\n case 'move':\n this.handleMove(index, file.name);\n break;\n case 'delete':\n this.handleDelete(index, file.name);\n break;\n case 'tag':\n this.handleTagManagement(file.name);\n break;\n }\n },\n // 返回上一级目录\n handleGoBack() {\n const pathParts = this.currentPath.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n pathParts.pop();\n const parentPath = pathParts.join('/');\n this.navigateToFolder(parentPath);\n }\n this.showMobileDirectoryDrawer = false;\n },\n // 获取标签颜色\n getTagColor(index) {\n const colors = ['linear-gradient(135deg, #667eea 0%, #764ba2 100%)', 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)', 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'];\n return colors[index % colors.length];\n },\n // 视频hover播放控制\n handleVideoHover(event, isEnter) {\n const video = event.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n },\n // 格式化文件大小\n formatFileSize(bytes) {\n if (!bytes || bytes === 0) return '-';\n bytes = Number(bytes);\n if (isNaN(bytes)) return '-';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (bytes >= 1024 && i < units.length - 1) {\n bytes /= 1024;\n i++;\n }\n return bytes.toFixed(i > 0 ? 1 : 0) + ' ' + units[i];\n },\n handleSearch() {\n this.search = this.tempSearch;\n this.isSearchMode = this.search.trim() !== '';\n this.currentPage = 1; // 重置到第一页\n\n // 解析搜索字符串,提取标签和关键字\n // 支持 #tag 表示包含标签,-#tag 表示排除标签\n if (this.search && this.search.trim()) {\n const includeTags = [];\n const excludeTags = [];\n\n // 匹配 -#tag 和 #tag\n let searchText = this.search;\n\n // 先匹配排除标签 -#tag\n const excludeTagRegex = /-#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(excludeTagRegex, (match, tag) => {\n excludeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 再匹配包含标签 #tag\n const includeTagRegex = /#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(includeTagRegex, (match, tag) => {\n includeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 清理剩余的关键字(去除多余空格)\n this.searchKeywords = searchText.replace(/\\s+/g, ' ').trim();\n\n // 构建标签查询字符串\n this.searchIncludeTags = includeTags.join(',');\n this.searchExcludeTags = excludeTags.join(',');\n console.log('Search keywords:', this.searchKeywords);\n console.log('Include tags:', this.searchIncludeTags);\n console.log('Exclude tags:', this.searchExcludeTags);\n } else {\n this.searchKeywords = '';\n this.searchIncludeTags = '';\n this.searchExcludeTags = '';\n }\n this.refreshFileList();\n },\n // 处理筛选变化(来自 FilterDropdown 组件)\n handleFilterChange({\n type,\n filters\n }) {\n this.filters = filters;\n this.currentPage = 1; // 重置到第一页\n this.refreshFileList();\n },\n // 清除所有筛选条件\n clearFilters() {\n this.filters = {\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.currentPage = 1;\n this.refreshFileList();\n },\n // 从 API 获取所有渠道名称\n async extractChannelNames() {\n try {\n const response = await fetchWithAuth('/api/channels?includeDisabled=true', {\n method: 'GET'\n });\n if (response.ok) {\n const channels = await response.json();\n const channelOptions = [];\n\n // 类型映射(显示名称)\n const typeLabels = {\n telegram: 'Telegram',\n cfr2: 'Cloudflare R2',\n s3: 'S3',\n discord: 'Discord',\n huggingface: 'HuggingFace',\n webdav: 'WebDAV'\n };\n\n // 按类型提取渠道名称,channel.type是类型内部存储名称(可能根据版本有变化),type是类型对外名称\n Object.entries(channels).forEach(([type, channelList]) => {\n if (Array.isArray(channelList) && channelList.length > 0) {\n channelList.forEach(channel => {\n if (channel.name) {\n channelOptions.push({\n name: channel.name,\n type: channel.type,\n typeLabel: typeLabels[type] || type,\n // 使用 channel.type:channel.name 作为唯一标识\n value: `${channel.type}:${channel.name}`\n });\n }\n });\n }\n });\n\n // 按类型和名称排序\n channelOptions.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type.localeCompare(b.type);\n }\n return a.name.localeCompare(b.name);\n });\n this.channelNameOptions = channelOptions;\n }\n } catch (error) {\n console.error('Failed to fetch channel names:', error);\n }\n },\n handleDownload(key) {\n const link = document.createElement('a');\n link.href = this.getFileLink(key);\n link.download = key;\n link.click();\n },\n openDetailDialog(index, key) {\n this.detailFile = this.paginatedTableData[index];\n this.showdetailDialog = true;\n },\n handleTabClick(tab) {\n this.activeUrlTab = tab.props.name;\n },\n handleUrlClick(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('dashboard.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('dashboard.copyFailed')\n });\n });\n },\n handleDetailDelete(key) {\n this.$confirm(this.$t('dashboard.deleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n this.showdetailDialog = false;\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBlock(key) {\n this.$confirm(this.$t('dashboard.blockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/block/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.blockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.blockFailed')));\n }).catch(() => console.log('Block cancelled'));\n },\n handleWhite(key) {\n this.$confirm(this.$t('dashboard.whiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/white/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.whiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.whiteFailed')));\n }).catch(() => console.log('White cancelled'));\n },\n handleDelete(index, key) {\n // 判断是否为文件夹\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n this.$confirm(isFolder ? this.$t('dashboard.deleteFolderConfirm') : this.$t('dashboard.deleteFileConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}?folder=${isFolder}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n fileManager.removeFile(key);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBatchDelete() {\n this.$confirm(this.$t('dashboard.batchDeleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/delete/${file.name}?folder=${isFolder}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n fileManager.removeFile(this.selectedFiles[index].name);\n }\n });\n this.selectedFiles = [];\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.batchDeleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchDeleteFailed')));\n }).catch(() => console.log('Batch delete cancelled'));\n },\n async handleBatchCopy() {\n // 分离文件和文件夹\n const files = this.selectedFiles.filter(item => !item.isFolder);\n const folders = this.selectedFiles.filter(item => item.isFolder);\n\n // 如果有文件夹,显示加载状态\n let loading = null;\n if (folders.length > 0) {\n loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n }\n try {\n // 收集所有文件(包括文件夹内的文件)\n let allFiles = [...files];\n\n // 递归获取所有文件夹内的文件\n for (const folder of folders) {\n try {\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folder.name)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n if (data.files && data.files.length > 0) {\n allFiles = allFiles.concat(data.files);\n }\n } catch (error) {\n console.error(`获取文件夹 ${folder.name} 内容失败:`, error);\n }\n }\n if (loading) loading.close();\n if (allFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 生成所有链接\n const links = allFiles.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.batchCopySuccess', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n }\n } catch (error) {\n if (loading) loading.close();\n console.error('Batch copy failed:', error);\n this.$message.error(this.$t('dashboard.batchCopyFailed'));\n }\n },\n copyToClipboardFallback(text) {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.style.position = 'fixed';\n textarea.style.clip = 'rect(0 0 0 0)';\n textarea.style.top = '10px';\n textarea.value = text;\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n this.$message.success(this.$t('dashboard.batchCopyLinksSuccess'));\n },\n handleCopy(index, key) {\n let text = '';\n if (this.paginatedTableData[index].metadata?.Channel === 'External') {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = this.paginatedTableData[index].metadata?.ExternalLink;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.paginatedTableData[index].metadata?.ExternalLink})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.paginatedTableData[index].metadata?.ExternalLink}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n } else {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = `${this.rootUrl}${key}`;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.rootUrl}${key})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.rootUrl}${key}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n }\n navigator.clipboard ? navigator.clipboard.writeText(text).then(() => this.$message.success(this.$t('dashboard.copyFileLinkSuccess'))) : this.copyToClipboardFallback(text);\n },\n async loadMoreData() {\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, 60, this.filters);\n // 获取新的文件列表后\n await this.fetchFileList();\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadMoreFailed'));\n } finally {\n this.loading = false;\n }\n },\n updateStats(num, init = false) {\n if (init) {\n this.Number = num;\n } else {\n this.Number += num;\n }\n },\n setSortField(field) {\n if (!SORT_FIELDS.includes(field)) return;\n this.sortField = field;\n this.currentPage = 1;\n localStorage.setItem('sortField', field);\n },\n setSortOrder(order) {\n if (!SORT_ORDERS.includes(order)) return;\n this.sortOrder = order;\n this.currentPage = 1;\n localStorage.setItem('sortOrder', order);\n },\n sortData(data) {\n if (!Array.isArray(data)) return [];\n const folders = data.filter(file => file.isFolder);\n const files = data.filter(file => !file.isFolder);\n const getSizeInBytes = item => {\n const parseSize = value => {\n if (value === null || value === undefined || value === '') return null;\n const parsedValue = Number(value);\n return Number.isFinite(parsedValue) ? parsedValue : null;\n };\n const sizeInBytes = parseSize(item.metadata?.FileSizeBytes);\n if (sizeInBytes !== null) return sizeInBytes;\n const sizeInMegabytes = parseSize(item.metadata?.FileSize);\n if (sizeInMegabytes !== null) return sizeInMegabytes * 1024 * 1024;\n return parseSize(item.size) ?? 0;\n };\n const getValue = item => {\n switch (this.sortField) {\n case 'size':\n return getSizeInBytes(item);\n case 'rawName':\n return item.metadata?.RawName || item.name || '';\n case 'fileName':\n return item.metadata?.FileName || item.name || '';\n case 'time':\n default:\n return item.metadata?.TimeStamp ? new Date(item.metadata.TimeStamp).getTime() : 0;\n }\n };\n const compare = (a, b) => {\n const valA = getValue(a);\n const valB = getValue(b);\n let result = 0;\n if (typeof valA === 'string' || typeof valB === 'string') {\n result = String(valA || '').localeCompare(String(valB || ''));\n } else {\n result = valA - valB;\n }\n return this.sortOrder === 'desc' ? -result : result;\n };\n folders.sort(compare);\n files.sort(compare);\n return folders.concat(files);\n },\n handleVideoClick(event) {\n const videoElement = event.target;\n if (videoElement.requestFullscreen) {\n videoElement.requestFullscreen();\n } else if (videoElement.webkitRequestFullscreen) {\n // Safari/Old Chrome\n videoElement.webkitRequestFullscreen();\n } else if (videoElement.mozRequestFullScreen) {\n // Firefox\n videoElement.mozRequestFullScreen();\n } else if (videoElement.msRequestFullscreen) {\n // IE/Edge\n videoElement.msRequestFullscreen();\n }\n },\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n handleSelectPage() {\n if (this.selectPage) {\n this.paginatedTableData.forEach(file => file.selected = false);\n } else {\n this.paginatedTableData.forEach(file => file.selected = true);\n }\n },\n clearSelection() {\n this.tableData.forEach(file => file.selected = false);\n this.selectedFiles = [];\n },\n handleBatchAction(command) {\n if (command === 'copy') {\n this.handleBatchCopy();\n } else if (command === 'delete') {\n this.handleBatchDelete();\n } else if (command === 'download') {\n this.handleBatchDownload();\n } else if (command === 'move') {\n this.handleBatchMove();\n } else if (command === 'tagManagement') {\n this.handleBatchTagManagement();\n } else if (command === 'ban') {\n this.handleBatchBlock();\n } else if (command === 'white') {\n this.handleBatchWhite();\n }\n },\n handleMove(index, key) {\n // 打开自定义移动对话框\n this.moveFileKey = key;\n this.moveFileIndex = index;\n this.isBatchMove = false;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n handleBatchMove() {\n // 打开自定义移动对话框(批量模式)\n this.isBatchMove = true;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n // 确认移动操作\n confirmMove(targetPath) {\n const value = targetPath;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return;\n }\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning(this.$t('dashboard.moveTargetSameAsCurrent'));\n return;\n }\n\n // 关闭对话框\n this.showMoveDialog = false;\n if (this.isBatchMove) {\n // 批量移动\n this.executeBatchMove(newPath);\n } else {\n // 单个文件移动\n this.executeSingleMove(newPath);\n }\n },\n // 执行单个文件移动\n executeSingleMove(newPath) {\n const key = this.moveFileKey;\n const isFolder = this.tableData.find(file => file.name === key)?.isFolder;\n fetchWithAuth(`/api/manage/move/${key}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + key.split('/').pop();\n fileManager.moveFile(key, newKey, isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n }\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n // 执行批量移动\n executeBatchMove(newPath) {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/move/${file.name}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const file = this.selectedFiles[index];\n file.selected = false;\n const fileIndex = this.tableData.findIndex(f => f.name === file.name);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + file.name.split('/').pop();\n fileManager.moveFile(file.name, newKey, file.isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n }\n }\n });\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n handleBatchBlock() {\n this.$confirm(this.$t('dashboard.batchBlockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/block/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchBlockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchBlockFailed')));\n }).catch(() => console.log('Batch block cancelled'));\n },\n handleBatchWhite() {\n this.$confirm(this.$t('dashboard.batchWhiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/white/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchWhiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchWhiteFailed')));\n }).catch(() => console.log('Batch white cancelled'));\n },\n handleBatchDownload() {\n // 将选中文件打包成 zip 文件下载\n const zip = new JSZip();\n const folder = zip.folder('files');\n // 构造Promise数组,等待所有文件下载完成后再打包\n const fileNameCount = {}; // 用于跟踪文件名出现的次数\n\n const downloadPromises = this.selectedFiles.map(async file => {\n // 跳过文件夹\n if (file.isFolder) {\n return;\n }\n const response = await fetch(this.getFileLink(file.name));\n const blob = await response.blob();\n // 检查文件名是否已经存在\n let fileName = file.metadata?.FileName || file.name;\n if (fileNameCount[fileName]) {\n // 如果已经存在,则在文件名后加上编号\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n const baseName = fileName.substring(0, fileName.lastIndexOf('.'));\n fileName = `${baseName}(${fileNameCount[fileName]})${extension}`;\n fileNameCount[file.name]++;\n } else {\n // 如果不存在,则初始化为1\n fileNameCount[fileName] = 1;\n }\n // 将文件添加到 zip 文件夹中\n folder.file(fileName, blob);\n });\n Promise.all(downloadPromises).then(() => zip.generateAsync({\n type: 'blob'\n })).then(blob => {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = 'files.zip';\n link.click();\n });\n },\n isVideo(file) {\n // 排除音频文件\n if (this.isAudio(file)) return false;\n let flag = file.metadata?.FileType?.includes('video');\n // 用文件名后缀判断是否为视频文件\n if (!flag) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'rmvb', '3gp', 'mpg', 'mpeg', 'm4v', 'f4v', 'rm', 'asf', 'dat', 'ts', 'vob', 'swf', 'divx', 'xvid', 'm2ts', 'mts', 'm2v', '3g2', '3gp2', '3gpp', '3gpp2', 'mpe', 'm1v', 'mpv', 'mpv2', 'mp2v', 'm2t', 'm2ts', 'm2v', 'm4v'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = videoExtensions.includes(extension);\n }\n return flag;\n },\n isAudio(file) {\n let flag = file.metadata?.FileType?.includes('audio');\n // 用文件名后缀判断是否为音频文件\n if (!flag) {\n const audioExtensions = ['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma', 'm4a', 'ape', 'aiff', 'alac', 'opus', 'mid', 'midi', 'm4b', 'm4p', 'm4r', 'amr', 'au', 'ra', 'ram'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = audioExtensions.includes(extension);\n }\n return flag;\n },\n isImage(file) {\n let flag = file.metadata?.FileType?.includes('image');\n // 用文件名后缀判断是否为图片文件\n if (!flag) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'psd', 'ai', 'eps', 'raw', 'cr2', 'nef', 'orf', 'sr2', 'dng', 'arw', 'rw2', 'raf', 'pef', 'x3f', 'srf', 'erf', 'mrw', 'nrw', 'kdc', 'dcr', 'mef', 'mos', 'crw', 'raf', 'rwl', 'srw', '3fr', 'fff', 'iiq', 'qtk', 'bay', 'k25', 'kdc', 'dcs', 'drf', 'dng', 'erf', 'kdc', 'mdc', 'mef', 'mos', 'mrw', 'nef', 'nrw', 'orf', 'pef', 'ptx', 'pxn', 'r3d', 'raf', 'raw', 'rwl', 'rw2', 'rwz', 'sr2', 'srf', 'x3f'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = imageExtensions.includes(extension);\n }\n return flag;\n },\n getFileLink(filename) {\n const fileLink = process.env.NODE_ENV === 'production' ? `/file/${filename}?from=admin` : `/api/file/${filename}?from=admin`;\n return fileLink;\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (this.currentPage === Math.ceil(this.tableData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n isMobileViewport() {\n return window.innerWidth < 768;\n },\n updateResponsivePageSize() {\n const nextPageSize = this.isMobileViewport() ? 16 : 15;\n if (this.pageSize === nextPageSize) return;\n const firstVisibleIndex = (this.currentPage - 1) * this.pageSize;\n this.pageSize = nextPageSize;\n this.currentPage = Math.min(Math.floor(firstVisibleIndex / nextPageSize) + 1, this.realTotalPages);\n },\n isSwipeIgnoredTarget(target) {\n return Boolean(target?.closest?.('button, a, input, textarea, select, .el-checkbox, .action-btn, .list-action-btn'));\n },\n handlePageSwipeStart(event) {\n if (!this.isMobileViewport() || this.isDragging || this.loading || this.showMobileActionModal || this.showMobileDirectoryDrawer || this.isSwipeIgnoredTarget(event.target)) {\n this.resetPageSwipe();\n return;\n }\n const touch = event.touches?.[0];\n if (!touch) return;\n this.pageSwipeStartX = touch.clientX;\n this.pageSwipeStartY = touch.clientY;\n this.pageSwipeStartTime = Date.now();\n },\n async handlePageSwipeEnd(event) {\n if (this.pageSwipeStartX === null || this.pageSwipeStartY === null) return;\n const touch = event.changedTouches?.[0];\n if (!touch) {\n this.resetPageSwipe();\n return;\n }\n const deltaX = touch.clientX - this.pageSwipeStartX;\n const deltaY = touch.clientY - this.pageSwipeStartY;\n const elapsed = Date.now() - this.pageSwipeStartTime;\n this.resetPageSwipe();\n if (elapsed > 700 || Math.abs(deltaX) < 64 || Math.abs(deltaX) < Math.abs(deltaY) * 1.35) {\n return;\n }\n const targetPage = deltaX < 0 ? this.currentPage + 1 : this.currentPage - 1;\n await this.goToSwipePage(targetPage);\n },\n resetPageSwipe() {\n this.pageSwipeStartX = null;\n this.pageSwipeStartY = null;\n this.pageSwipeStartTime = 0;\n },\n async goToSwipePage(page) {\n if (page < 1 || page > this.realTotalPages || page === this.currentPage) return;\n if (page > this.totalPages) {\n await this.loadMoreDataUntilPage(page);\n return;\n }\n this.handlePageChange(page);\n },\n // 跳转到指定页码\n handleJumpPage() {\n const page = parseInt(this.jumpPage);\n if (isNaN(page) || page < 1) {\n this.$message.warning(this.$t('dashboard.invalidPageNumber'));\n return;\n }\n if (page > this.realTotalPages) {\n this.$message.warning(this.$t('dashboard.pageExceedsMax', {\n max: this.realTotalPages\n }));\n return;\n }\n // 如果目标页超过当前已加载的页数,需要先加载更多数据\n if (page > this.totalPages) {\n this.$message.info(this.$t('dashboard.loadingData'));\n this.loadMoreDataUntilPage(page);\n } else {\n this.currentPage = page;\n }\n this.jumpPage = '';\n },\n // 加载数据直到指定页\n async loadMoreDataUntilPage(targetPage) {\n this.loading = true;\n try {\n // 计算目标页需要的文件数量(不包含文件夹)\n // 目标页最后一个项目的索引 = targetPage * pageSize\n // 需要的文件数 = 目标索引 - 已有文件夹数量\n const targetIndex = targetPage * this.pageSize;\n const currentFolderCount = this.filteredTableData.filter(item => item.isFolder).length;\n const currentFileCount = this.filteredTableData.filter(item => !item.isFolder).length;\n\n // 需要加载的文件数量 = 目标位置需要的文件数 - 当前已加载的文件数\n const neededFileCount = Math.max(0, targetIndex - currentFolderCount - currentFileCount);\n if (neededFileCount > 0) {\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, neededFileCount, this.filters);\n await this.fetchFileList();\n }\n this.currentPage = Math.min(targetPage, this.totalPages);\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadDataFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 判断是否为文件夹\n isFolder(item) {\n // 如果是已经标记为文件夹的项目,直接返回true\n if (item.isFolder) {\n return true;\n }\n\n // 获取真实的文件路径(去除URL前缀)\n let path = item.name;\n if (path.startsWith('http')) {\n path = path.split('/file/')[1];\n }\n\n // 如果文件名包含'/',需要判断是否是当前路径下的文件\n if (path && path.includes('/')) {\n // 获取相对于当前路径的部分\n const relativePath = this.currentPath ? path.substring(this.currentPath.length) : path;\n\n // 如果在根目录,第一个斜杠前的部分就是文件夹\n if (this.currentPath === '') {\n return !path.split('/')[0].includes('.');\n }\n\n // 如果在子文件夹中,检查相对路径是否还包含其他文件夹\n return relativePath.includes('/');\n }\n return false;\n },\n // 获取文件夹名称\n getFolderName(path) {\n let folderName = '';\n // 如果是文件夹路径,只返回最后一级文件夹名\n if (path && path.includes('/')) {\n const parts = path.split('/');\n // 如果是根目录下的文件夹\n if (this.currentPath === '') {\n folderName = parts[0];\n } else {\n // 如果是子文件夹\n const relativePath = path.substring(this.currentPath.length);\n folderName = relativePath.split('/')[0];\n }\n } else {\n folderName = path;\n }\n const maxLength = 20; // Adjust max length as needed\n if (folderName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${folderName.substring(0, startLength)}...${folderName.substring(folderName.length - endLength)}`;\n }\n return folderName;\n },\n // 获取文件名称(去除路径和URL前缀)\n getFileName(path) {\n let fileName = path.split('/').pop();\n const maxLength = 20; // Adjust max length as needed, ensure it fits in one line\n if (fileName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${fileName.substring(0, startLength)}...${fileName.substring(fileName.length - endLength)}`;\n }\n return fileName;\n },\n // 获取文件名前半部分(用于中间省略效果)\n getFileNameStart(name) {\n if (!name) return '';\n // 如果文件名较短,返回全部\n if (name.length <= 30) return name;\n // 保留开头部分(约60%的长度用于显示前半部分)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回文件名主体部分\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(baseName.length, Math.floor(name.length * 0.6));\n return baseName.substring(0, keepLength);\n }\n // 无扩展名的情况\n return name.substring(0, Math.floor(name.length * 0.6));\n },\n // 获取文件名后半部分(用于中间省略效果)\n getFileNameEnd(name) {\n if (!name) return '';\n // 如果文件名较短,返回空\n if (name.length <= 30) return '';\n // 保留末尾部分(包含扩展名)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回最后几个字符 + 扩展名\n const ext = name.substring(dotIndex);\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(8, Math.floor(baseName.length * 0.2));\n return '…' + baseName.substring(baseName.length - keepLength) + ext;\n }\n // 无扩展名的情况\n const keepLength = Math.min(10, Math.floor(name.length * 0.3));\n return '…' + name.substring(name.length - keepLength);\n },\n // 进入文件夹\n enterFolder(folderPath) {\n // 确保路径末尾有 '/'\n this.currentPath = folderPath + (folderPath.endsWith('/') ? '' : '/');\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 导航到指定文件夹\n navigateToFolder(path) {\n // 确保空路径时不添加 '/'\n this.currentPath = path ? path + (path.endsWith('/') ? '' : '/') : '';\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 获取文件列表\n async fetchFileList() {\n this.loading = true;\n try {\n // 从本地存储获取数据\n const data = fileManager.getLocalFileList();\n\n // 解析返回的数据\n const folders = new Set(data.directories || []);\n const files = data.files || [];\n\n // 处理文件夹数据\n const folderItems = Array.from(folders).map(folder => ({\n name: folder,\n isFolder: true,\n selected: false,\n metadata: {\n FileName: folder.split('/').pop()\n }\n }));\n\n // 处理文件数据\n const fileItems = files.map(file => ({\n name: file.name,\n isFolder: false,\n selected: false,\n metadata: file.metadata\n }));\n\n // 更新表格数据\n this.tableData = [...folderItems, ...fileItems];\n\n // 更新统计信息\n this.updateStats(data.totalCount, true);\n\n // 更新直接文件和文件夹数量\n this.directFileCount = data.directFileCount || 0;\n this.directFolderCount = data.directFolderCount || 0;\n } catch (error) {\n console.error('Error fetching file list:', error);\n this.$message.error(this.$t('dashboard.fetchFileListFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 刷新文件列表\n async refreshFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n const success = await fileManager.refreshFileList(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, this.filters);\n if (success) {\n await this.fetchFileList();\n } else {\n throw new Error('Refresh failed');\n }\n } catch (error) {\n // 认证失败由 fetchWithAuth 统一处理跳转,不重复提示\n if (!error.message?.includes('Unauthorized') && this.$store.state.adminLoggedIn) {\n console.error('Error refreshing file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n }\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // 刷新本地文件列表\n async refreshLocalFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n await this.fetchFileList();\n } catch (error) {\n console.error('Error refreshing local file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // Tag management methods\n handleTagManagement(fileId) {\n this.currentTagFile = fileId;\n this.showTagDialog = true;\n },\n handleBatchTagManagement() {\n if (this.selectedFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.selectFilesFirst'));\n return;\n }\n this.showBatchTagDialog = true;\n },\n async handleTagsUpdated(tags) {\n // 更新本地文件数据中的标签\n const fileIndex = this.tableData.findIndex(file => file.name === this.currentTagFile);\n if (fileIndex !== -1) {\n // 更新 tableData 中的标签\n if (!this.tableData[fileIndex].metadata) {\n this.tableData[fileIndex].metadata = {};\n }\n this.tableData[fileIndex].metadata.Tags = tags;\n\n // 如果详情对话框正在显示这个文件,也更新详情数据\n if (this.showdetailDialog && this.detailFile?.name === this.currentTagFile) {\n if (!this.detailFile.metadata) {\n this.detailFile.metadata = {};\n }\n this.detailFile.metadata.Tags = tags;\n }\n }\n },\n async handleBatchTagsUpdated() {\n // 刷新文件列表以显示更新后的标签\n await this.refreshLocalFileList();\n },\n handleMetadataUpdated(fileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === fileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 如果 detailFile 正在显示该文件,同步更新 detailFile\n if (this.detailFile && this.detailFile.name === fileId) {\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n }\n },\n handleFileRenamed(oldFileId, newFileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 name(File_ID)和 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === oldFileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].name = newFileId;\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 更新 detailFile 引用并关闭/重新打开详情弹窗以刷新链接\n if (this.detailFile && this.detailFile.name === oldFileId) {\n this.detailFile.name = newFileId;\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n // 关闭详情弹窗,然后在下一个 tick 重新打开以刷新所有链接\n this.showdetailDialog = false;\n this.$nextTick(() => {\n this.showdetailDialog = true;\n });\n }\n },\n // 生成单个文件链接\n generateFileLink(key, metadata) {\n const isExternal = metadata?.Channel === 'External';\n const baseUrl = isExternal ? metadata?.ExternalLink : `${this.rootUrl}${key}`;\n const fileName = metadata?.FileName || key;\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n return baseUrl;\n case 'mdUrl':\n return `![${fileName}](${baseUrl})`;\n case 'htmlUrl':\n return `\"${fileName}\"`;\n case 'bbUrl':\n return `[img]${baseUrl}[/img]`;\n case 'tgId':\n return metadata?.TgFileId || '';\n case 's3Location':\n return metadata?.S3Location || '';\n default:\n return baseUrl;\n }\n },\n // 复制文件夹中所有文件的链接\n async handleFolderCopy(folderName) {\n // 显示加载状态\n const loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n try {\n // 调用 list API 递归获取文件夹内所有文件\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folderName)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n loading.close();\n if (!data.files || data.files.length === 0) {\n this.$message.warning(this.$t('dashboard.folderEmptyNoLinks'));\n return;\n }\n\n // 根据当前链接格式生成所有文件链接\n const links = data.files.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n }\n } catch (error) {\n loading.close();\n console.error('Copy folder links failed:', error);\n this.$message.error(this.$t('dashboard.copyFolderLinksFailed'));\n }\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.updateResponsivePageSize();\n window.addEventListener('resize', this.updateResponsivePageSize);\n this.loading = true;\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n // 首次加载时刷新文件列表\n this.refreshFileList().then(() => {\n // 获取所有渠道名称\n return this.extractChannelNames();\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('dashboard.syncDataError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n\n // 读取自定义链接设置项\n this.customUrlPrefix = this.adminUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.adminUrlSettings.useCustomUrl;\n\n // 恢复视图模式偏好\n const savedViewMode = localStorage.getItem('viewMode');\n if (savedViewMode === 'card' || savedViewMode === 'list') {\n this.viewMode = savedViewMode;\n }\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.updateResponsivePageSize);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminDashBoard.vue?vue&type=template&id=1af8d52e&scoped=true\"\nimport script from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\nexport * from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"@/styles/admin-common.css?vue&type=style&index=1&id=1af8d52e&scoped=true&lang=css&external\"\nimport \"./AdminDashBoard.vue?vue&type=style&index=2&id=1af8d52e&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1af8d52e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","width","trigger","transition","reference","onClick","$slots","undefined","default","error","icon","type","size","fetchDirectoryTree","$t","_","ref","data","treeData","props","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","name","loading","args","openDrawer","modelValue","drawerVisible","direction","title","String","source","validator","value","includes","children","label","windowWidth","window","innerWidth","computed","this","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","axios","get","withAuthCode","tree","err","console","startsWith","$emit","__exports__","e","module","exports","s","a","o","h","u","r","t","l","n","Error","code","i","call","length","d","c","p","encode","f","getTypeOf","charCodeAt","push","charAt","join","decode","substr","replace","uint8array","Uint8Array","Array","indexOf","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","fromCharCode","file","O","utf8encode","I","m","g","b","v","y","w","k","x","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","end","generatedError","lock","generateWorker","platform","forEach","options","_compressWorker","arguments","files","Object","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","from","allocBuffer","alloc","fill","isBuffer","Date","toUpperCase","parseInt","slice","substring","lastIndexOf","toString","filter","test","folder","remove","generate","generateInternalStream","mimeType","toLowerCase","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","index","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","max","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","Math","min","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","concat","apply","set","_worker","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","blob","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","floor","buffer","byteLength","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","target","result","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","abs","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","port1","onmessage","port2","postMessage","global","TypeError","state","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","constructor","catch","race","immediate","assign","chunkSize","windowBits","memLevel","strategy","to","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","attachEvent","Function","callback","clearImmediate","validateFolderPath","strict","trim","valid","i18n","dotPattern","invalidChars","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_component_el_input","_component_DirectoryTreePicker","_component_el_dialog","dialogVisible","isBatchMove","onClose","handleClose","footer","handleConfirm","targetPath","placeholder","prepend","onSelect","handleDirectorySelect","showTreePicker","treeError","handleTreeNodeClick","treeLoading","components","DirectoryTreePicker","Boolean","initialPath","emits","val","close","active","currentPath","navigate","pathParts","style","paddingLeft","goBack","isFolder","handleAction","action","_component_el_tag","_component_el_tab_pane","_component_el_alert","_component_el_tabs","dialogWidth","activeTab","count","fileCount","inputTag","onKeyup","handleAddInputTag","onInput","handleInputChange","clearable","showSuggestions","suggestions","tag","selectSuggestion","tagsToAdd","closable","removeFromToAdd","executeAddTags","disabled","commonTags","handleRemoveCommonTag","description","center","handleClearAllTags","selectedFiles","required","debounceTimer","selectedFilesOnly","fileIds","map","loadCommonTags","resetData","newTab","tagPromises","encodeURIComponent","responses","allTags","tags","every","clearTimeout","fetchSuggestions","prefix","warning","splice","headers","body","JSON","stringify","success","updated","confirm","confirmButtonText","cancelButtonText","executeClearTags","info","_component_Loading","_component_el_icon","handleAddTag","currentTags","handleRemoveTag","popularTags","handleAddPopularTag","loadingPopularTags","Loading","fileId","loadFileTags","loadPopularTags","message","_component_el_image","_component_el_descriptions_item","_component_el_descriptions","_component_el_form_item","_component_el_form","isEditing","round","startEdit","openRenameDialog","saveMetadata","editSaving","cancelEdit","onTabClick","handleTabClick","urls","originUrl","readonly","handleUrlClick","mdUrl","htmlUrl","bbUrl","metadata","TgFileId","tgId","S3Location","S3CdnFileUrl","isVideo","src","fileLink","autoplay","muted","loop","openImageLink","isAudio","controls","isImage","fit","lazy","border","column","descColumn","editForm","FileName","FileType","fileSizeDisplay","imageDimensions","Width","Height","orientationIcon","uploadTime","Channel","ChannelName","accessTagType","accessType","Label","UploadIP","UploadAddress","Tags","showRenameDialog","closeRenameDialog","submitRename","renameSaving","renameValidation","onSubmit","renameForm","newFileId","validateRenameInput","INVALID_CHARS","validateFileId","currentFileId","fileType","endsWith","TimeStamp","toLocaleString","listType","ListType","height","ratio","sizeBytes","FileSizeBytes","sizeMB","FileSize","toFixed","handleVideoClick","video","paused","play","select","navigator","clipboard","writeText","open","oldFileId","_component_el_tooltip","selectedCount","disableTooltip","content","handleClear","actions","command","className","Number","_component_el_checkbox","onTouchstart","onTouchend","onTouchmove","localSelected","onChange","handleSelectChange","handlePreviewClick","preload","decoding","displayName","fileNameStart","fileNameEnd","item","tagIndex","background","getTagColor","channelTag","uploadDate","selected","tagColors","parts","getFileName","uploaded","toLocaleDateString","_component_el_card","videoLoading","videoError","onMouseenter","handleVideoHover","onMouseleave","onFullscreenchange","handleFullscreenChange","onWebkitfullscreenchange","onLoadeddata","onError","handleVideoError","previewSrcList","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","isFullscreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","currentTime","isEnter","folderName","showActions","variant","checked","indeterminate","role","ariaChecked","tabindex","handleClick","onKeydown","markIcon","event","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_badge","_component_el_checkbox_group","_component_el_dropdown_menu","_component_el_dropdown","dropdown","localFilters","accessStatus","handleFilterChange","accessStatusOptions","option","listTypeOptions","labelOptions","fileTypeOptions","channel","channelOptions","channelNameOptions","channelName","groupedChannelNames","group","typeLabel","channels","clearFilters","activeFilterCount","hidden","filters","values","reduce","arr","groups","handler","newFilters","isArray","deep","viewBox","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_component_DashboardTabs","_component_FilterDropdown","_component_el_header","_component_DashboardCheckbox","_component_el_radio_button","_component_el_radio_group","_component_el_divider","_component_el_dropdown_item","_component_el_breadcrumb_item","_component_el_breadcrumb","_component_SkeletonLoader","_component_FolderCard","_component_FileCard","_component_FileListItem","_component_el_pagination","_component_el_main","_component_el_container","_component_BatchActionBar","_component_FileDetailDialog","_component_el_radio","_component_el_switch","_component_TagManagementDialog","_component_BatchTagDialog","_component_MobileActionSheet","_component_MobileDirectoryDrawer","_component_MoveFileDialog","tempSearch","handleSearch","suffix","showUrlDialog","handleLogout","selectPage","selectedPageFiles","handleSelectPage","viewMode","setViewMode","onCommand","setSortField","sortOrder","setSortOrder","sortField","sortLabel","cx","cy","showMobileDirectoryDrawer","separator","navigateToFolder","isDragging","onTouchstartPassive","handlePageSwipeStart","onTouchendPassive","handlePageSwipeEnd","onTouchcancelPassive","resetPageSwipe","pageSize","paginatedTableData","hasSearchOrFilter","isSearchMode","onEnter","enterFolder","onCopy","handleFolderCopy","onMove","handleMove","onDelete","handleDelete","handleFolderTouchStart","handleTouchEnd","getFileLink","onDetail","openDetailDialog","handleCopy","onDownload","handleDownload","handleTouchStart","isSelectAll","isIndeterminate","handleSelectAllPage","onFolderCopy","position","left","selectionRect","top","layout","filteredTableData","currentPage","pagerCount","onCurrentChange","handlePageChange","refreshFileList","refreshLoading","ceil","loadMoreData","realTotalPages","jumpPage","handleJumpPage","onAction","handleBatchAction","onClear","clearSelection","showdetailDialog","detailFile","allUrl","onTagManagement","handleTagManagement","onBlock","handleBlock","onWhite","handleWhite","handleDetailDelete","onMetadataUpdated","handleMetadataUpdated","onFileRenamed","handleFileRenamed","defaultUrlFormat","useCustomUrl","customUrlPrefix","showTagDialog","currentTagFile","onTagsUpdated","handleTagsUpdated","showBatchTagDialog","handleBatchTagsUpdated","showMobileActionModal","mobileActionIsFolder","getFolderName","mobileActionFile","handleMobileAction","onNavigate","onGoBack","handleGoBack","showMoveDialog","moveTargetPath","onConfirm","confirmMove","FileManager","FILE_LIST_PATH","fileListCache","storageWarningShown","getLocalFileList","fileList","getMutableFileList","directories","localStorage","getItem","parse","createEmptyFileList","updateFileListCache","persisted","persistFileListCache","cacheUpdated","setItem","handleStoragePersistError","warn","removeItem","removeError","ElMessage","addFile","newFile","addFolder","moveFile","oldPath","newPath","oldFolderIndex","fileIndex","findIndex","pathArray","newFolder","removeFile","removeFolder","getFilesInFolder","subdirectories","buildFilterParams","params","search","includeTags","excludeTags","url","newFileList","isIndexedResponse","loadMoreFiles","start","moreFiles","fileManager","rectIntersects","rectA","rectB","right","bottom","calcSelectionRect","current","useDragSelect","modes","mainSelector","items","startPoint","preSelectSnapshot","isAppendMode","MOBILE_BREAKPOINT","listenerAttached","EDGE_THRESHOLD","SCROLL_SPEED","autoScrollTimer","savedUserSelect","getActiveConfig","toValue","shouldEnable","syncListenerState","attachContainerListener","cancelDrag","detachContainerListener","isBlankArea","mainArea","closest","config","itemEl","itemSelector","container","containerRef","contains","interactive","hasAppendModifier","shiftKey","ctrlKey","metaKey","saveSnapshot","currentItems","lastClientY","startAutoScroll","scrollStep","viewportHeight","innerHeight","scrollDelta","scrollBy","updateSelection","requestAnimationFrame","stopAutoScroll","cancelAnimationFrame","disableTextSelection","userSelect","restoreTextSelection","rect","selRect","itemElements","querySelectorAll","itemRect","getBoundingClientRect","itemBounds","intersects","onMouseDown","button","clientX","clientY","onMouseMove","onMouseUp","currentPoint","_event","onWindowResize","onMounted","onBeforeUnmount","SORT_FIELDS","SORT_ORDERS","getStoredSortValue","validValues","fallback","mixins","backgroundManager","directFileCount","directFolderCount","showLogoutButton","tableData","searchKeywords","searchIncludeTags","searchExcludeTags","isUploading","activeUrlTab","mobileActionIndex","longPressTimer","moveFileKey","moveFileIndex","pageSwipeStartX","pageSwipeStartY","pageSwipeStartTime","DashboardTabs","TagManagementDialog","BatchTagDialog","SkeletonLoader","FileCard","FolderCard","FileListItem","FileDetailDialog","BatchActionBar","MobileActionSheet","MobileDirectoryDrawer","DashboardCheckbox","FilterDropdown","MoveFileDialog","LanguageSwitcher","setup","cardContainerRef","listContainerRef","viewModeRef","itemsRef","card","list","totalPages","sortedData","sortData","fullList","labelKeys","rawName","fieldLabel","orderLabel","detailDialogWidth","ExternalLink","rootUrl","tableColumnNum","tablePreviewSpan","some","userConfig","urlPrefix","location","origin","newData","newFormat","$store","commit","parentPath","colors","formatFileSize","bytes","isNaN","units","searchText","excludeTagRegex","match","includeTagRegex","log","extractChannelNames","typeLabels","telegram","cfr2","s3","discord","huggingface","webdav","entries","channelList","sort","localeCompare","link","href","download","click","tab","$message","$confirm","updateStats","find","handleBatchDelete","promises","results","successNum","handleBatchCopy","folders","$loading","allFiles","links","generateFileLink","copyToClipboardFallback","textarea","clip","execCommand","fetchFileList","num","init","field","order","getSizeInBytes","parseSize","parsedValue","isFinite","sizeInBytes","sizeInMegabytes","getValue","RawName","getTime","compare","valA","valB","videoElement","fetch","credentials","authType","$router","handleBatchDownload","handleBatchMove","handleBatchTagManagement","handleBatchBlock","handleBatchWhite","validation","executeBatchMove","executeSingleMove","newKey","tempData","refreshLocalFileList","zip","fileNameCount","downloadPromises","extension","baseName","URL","createObjectURL","flag","videoExtensions","audioExtensions","imageExtensions","filename","page","isMobileViewport","updateResponsivePageSize","nextPageSize","firstVisibleIndex","isSwipeIgnoredTarget","touch","touches","now","changedTouches","deltaX","deltaY","elapsed","targetPage","goToSwipePage","loadMoreDataUntilPage","targetIndex","currentFolderCount","currentFileCount","neededFileCount","relativePath","maxLength","startLength","endLength","getFileNameStart","dotIndex","keepLength","getFileNameEnd","ext","folderPath","Set","folderItems","fileItems","totalCount","adminLoggedIn","updatedMetadata","isExternal","baseUrl","initializeBackground","adminUrlSettings","savedViewMode"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/609.3a7a8c93.js.map.gz b/frontend-dist/js/609.3a7a8c93.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..7384da38c3ca8f8ff652e1312f06945643967166 GIT binary patch literal 149935 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 z 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%0D1`1rh3B%y`#DnHR}$8Y;`eNp!&2rc8-R$V(u-9 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,i.uX)(),(0,i.CE)("div",{key:t.index,class:(0,n.C4)(["menu-item",{"is-active":s.activeIndex===t.index}]),onClick:e=>d.handleSelect(t.index)},[(0,i.bF)(h,{icon:t.icon,class:"menu-icon"},null,8,["icon"]),(0,i.Lk)("span",l,(0,n.v_)(e.$t(t.titleKey)),1)],10,o))),128))]),(0,i.Lk)("div",{class:"toggle-button",onClick:t[0]||(t[0]=(...e)=>d.toggleCollapse&&d.toggleCollapse(...e))},[(0,i.bF)(h,{icon:s.isCollapse?"angle-double-right":"angle-double-left"},null,8,["icon"])])],6)}var c={name:"SysConfigTabs",props:{activeIndex:{type:String,default:"status"},isCollapse:{type:Boolean,default:!1}},data(){return{expandedWidth:null,menuItems:[{index:"status",icon:"chart-bar",titleKey:"sysConfigTabs.systemStatus"},{index:"upload",icon:"cloud-upload",titleKey:"sysConfigTabs.uploadSettings"},{index:"security",icon:"shield",titleKey:"sysConfigTabs.securitySettings"},{index:"page",icon:"pager",titleKey:"sysConfigTabs.pageSettings"},{index:"others",icon:"cog",titleKey:"sysConfigTabs.otherSettings"}]}},computed:{collapsedWidth(){return window.innerWidth<=768?50:56},sidebarStyle(){return this.isCollapse?{width:this.collapsedWidth+"px"}:this.expandedWidth?{width:this.expandedWidth+"px"}:{}}},watch:{"$i18n.locale"(){this.$nextTick(()=>this.measureWidth())}},methods:{toggleCollapse(){this.$emit("update:isCollapse",!this.isCollapse)},checkMobile(){const e=window.innerWidth<=768;this.$emit("update:isCollapse",e)},handleSelect(e){this.$emit("update:activeIndex",e)},measureWidth(){const e=this.$refs.sidebar;if(!e)return;const t=e.style.width,s=e.style.transition,i=e.classList.contains("is-collapsed");e.style.transition="none",i&&e.classList.remove("is-collapsed"),e.style.width="auto",e.offsetWidth;const n=e.scrollWidth;e.style.width=t,i&&e.classList.add("is-collapsed"),e.offsetWidth,e.style.transition=s,this.expandedWidth=n}},mounted(){this.checkMobile(),this.$nextTick(()=>this.measureWidth()),window.addEventListener("resize",this.checkMobile)},beforeDestroy(){window.removeEventListener("resize",this.checkMobile)}},d=s(71241);const h=(0,d.A)(c,[["render",r],["__scopeId","data-v-a37302cc"]]);var u=h,p=s(54880),g=(s(85331),s(77128),s(78507)),f=(s(213),s(91570));const m={class:"container"},b={class:"header-content admin-header-content"},y={class:"header-action"};function x(e,t,s,a,o,l){const r=f.A,c=(0,i.g2)("font-awesome-icon"),d=g.R7,h=p.bZ,x=u;return(0,i.uX)(),(0,i.CE)("div",m,[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",b,[(0,i.bF)(r,{activeTab:"systemConfig"}),(0,i.Lk)("div",y,[(0,i.bF)(d,{disabled:l.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{icon:"sign-out-alt",class:"header-icon",onClick:l.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,i.bF)(x,{activeIndex:o.activeIndex,"onUpdate:activeIndex":t[0]||(t[0]=e=>o.activeIndex=e),isCollapse:o.isSidebarCollapse,"onUpdate:isCollapse":t[1]||(t[1]=e=>o.isSidebarCollapse=e)},null,8,["activeIndex","isCollapse"]),((0,i.uX)(),(0,i.Wv)((0,i.$y)(l.currentComponent),{class:(0,n.C4)(["main-container",{collapsed:o.isSidebarCollapse}])},null,8,["class"]))])}s(44114);var v=s(99114),k=(s(30694),s(57009)),_=(s(78450),s(69655)),w=(s(2893),s(9267)),C=(s(15616),s(45130));const S={class:"date-range-calendar"},F={class:"selected-range"},T={class:"selected-range-inputs"},M=["aria-label"],P={class:"date-range-separator"},D=["aria-label"],A={class:"calendar-header"},$=["aria-label"],L={class:"calendar-title"},V=["aria-label"],E={class:"calendar-weekdays"},I={class:"calendar-grid"},U=["onClick"];function O(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",S,[(0,i.Lk)("div",F,[(0,i.Lk)("div",T,[(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>o.inputStart=e),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.startDateLabel,onChange:t[1]||(t[1]=(...e)=>l.handleManualInput&&l.handleManualInput(...e))},null,40,M),[[C.Jo,o.inputStart,void 0,{trim:!0}]]),(0,i.Lk)("span",P,(0,n.v_)(l.rangeSeparator),1),(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":t[2]||(t[2]=e=>o.inputEnd=e),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.endDateLabel,onChange:t[3]||(t[3]=(...e)=>l.handleManualInput&&l.handleManualInput(...e))},null,40,D),[[C.Jo,o.inputEnd,void 0,{trim:!0}]])])]),(0,i.Lk)("div",A,[(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.previousMonthLabel,onClick:t[4]||(t[4]=(...e)=>l.goToPreviousMonth&&l.goToPreviousMonth(...e))},[(0,i.bF)(r,{icon:"chevron-left"})],8,$),(0,i.Lk)("div",L,(0,n.v_)(l.monthTitle),1),(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.nextMonthLabel,onClick:t[5]||(t[5]=(...e)=>l.goToNextMonth&&l.goToNextMonth(...e))},[(0,i.bF)(r,{icon:"chevron-right"})],8,V)]),(0,i.Lk)("div",E,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.weekdayLabels,e=>((0,i.uX)(),(0,i.CE)("span",{key:e},(0,n.v_)(e),1))),128))]),(0,i.Lk)("div",I,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.calendarDays,e=>((0,i.uX)(),(0,i.CE)("button",{key:e.key,type:"button",class:(0,n.C4)(["calendar-day",{"is-muted":!e.isCurrentMonth,"is-today":e.isToday,"is-range-start":e.key===o.draftStart,"is-range-end":e.key===o.draftEnd,"is-in-range":l.isInRange(e.key)}]),onClick:t=>l.selectDay(e.key)},(0,n.v_)(e.dayOfMonth),11,U))),128))])])}const R=864e5;function W(e){return String(e).padStart(2,"0")}function B(e){return`${e.getFullYear()}-${W(e.getMonth()+1)}-${W(e.getDate())}`}function z(e){if("string"!==typeof e)return null;const t=e.trim().match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);if(!t)return null;const s=Number(t[1]),i=Number(t[2])-1,n=Number(t[3]),a=new Date(s,i,n);return a.getFullYear()!==s||a.getMonth()!==i||a.getDate()!==n?null:(a.setHours(0,0,0,0),a)}function N(e,t){return new Date(e.getFullYear(),e.getMonth()+t,1)}var j={name:"DateRangeCalendar",props:{modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue","change"],data(){const e=new Date;return e.setHours(0,0,0,0),{displayYear:e.getFullYear(),displayMonth:e.getMonth(),draftStart:"",draftEnd:"",inputStart:"",inputEnd:"",awaitingEnd:!1}},computed:{previousMonthLabel(){return this.$t("dateRangeCalendar.previousMonth")},nextMonthLabel(){return this.$t("dateRangeCalendar.nextMonth")},startDateLabel(){return this.$t("dateRangeCalendar.startDate")},endDateLabel(){return this.$t("dateRangeCalendar.endDate")},rangeSeparator(){return this.$t("dateRangeCalendar.rangeSeparator")},monthTitle(){return this.$t("dateRangeCalendar.monthTitle",{year:this.displayYear,month:W(this.displayMonth+1)})},weekdayLabels(){return[this.$t("dateRangeCalendar.weekdaySun"),this.$t("dateRangeCalendar.weekdayMon"),this.$t("dateRangeCalendar.weekdayTue"),this.$t("dateRangeCalendar.weekdayWed"),this.$t("dateRangeCalendar.weekdayThu"),this.$t("dateRangeCalendar.weekdayFri"),this.$t("dateRangeCalendar.weekdaySat")]},calendarDays(){const e=new Date(this.displayYear,this.displayMonth,1),t=new Date(this.displayYear,this.displayMonth,1-e.getDay()),s=B(new Date);return Array.from({length:42},(e,i)=>{const n=new Date(t.getTime()+i*R),a=B(n);return{key:a,dayOfMonth:n.getDate(),isCurrentMonth:n.getMonth()===this.displayMonth,isToday:a===s}})}},watch:{modelValue:{immediate:!0,handler(e){this.syncFromModel(e)}}},methods:{syncFromModel(e){const t=z(e?.[0]),s=z(e?.[1]);this.draftStart=t?B(t):"",this.draftEnd=s?B(s):"",this.inputStart=this.draftStart,this.inputEnd=this.draftEnd,this.awaitingEnd=!1;const i=t||s;i&&(this.displayYear=i.getFullYear(),this.displayMonth=i.getMonth())},goToPreviousMonth(){const e=N(new Date(this.displayYear,this.displayMonth,1),-1);this.displayYear=e.getFullYear(),this.displayMonth=e.getMonth()},goToNextMonth(){const e=N(new Date(this.displayYear,this.displayMonth,1),1);this.displayYear=e.getFullYear(),this.displayMonth=e.getMonth()},selectDay(e){if(!this.draftStart||this.draftEnd||!this.awaitingEnd)return this.draftStart=e,this.draftEnd="",this.inputStart=e,this.inputEnd="",void(this.awaitingEnd=!0);const t=ethis.draftStart&&el.fetchIndexInfo&&l.fetchIndexInfo(...e))},[(0,i.Lk)("div",re,[(0,i.bF)(r,{icon:"database"})]),(0,i.Lk)("div",ce,[(0,i.Lk)("div",de,(0,n.v_)(e.$t("sysStatus.totalFiles")),1),(0,i.Lk)("div",he,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",ue,(0,n.v_)(e.$t("sysStatus.clickToRefresh")),1)])]),(0,i.Lk)("div",pe,[(0,i.Lk)("div",ge,[(0,i.bF)(r,{icon:"clock"})]),(0,i.Lk)("div",fe,[(0,i.Lk)("div",me,(0,n.v_)(e.$t("sysStatus.indexUpdateTime")),1),(0,i.Lk)("div",be,(0,n.v_)(l.formatTime(o.indexInfo.lastUpdated)),1),(0,i.Lk)("div",ye,(0,n.v_)(l.getTimeAgo(o.indexInfo.lastUpdated)),1)])]),(0,i.Lk)("div",{class:"overview-card system-version",onClick:t[1]||(t[1]=(...e)=>l.openReleases&&l.openReleases(...e))},[(0,i.Lk)("div",xe,[(0,i.bF)(r,{icon:"code-branch"})]),(0,i.Lk)("div",ve,[(0,i.Lk)("div",ke,(0,n.v_)(e.$t("sysStatus.systemVersion")),1),(0,i.Lk)("div",_e,"v"+(0,n.v_)(o.version),1),(0,i.Lk)("div",we,(0,n.v_)(e.$t("sysStatus.clickToViewChangelog")),1)])])]),(0,i.Lk)("div",Ce,[(0,i.Lk)("div",Se,[(0,i.Lk)("div",Fe,[(0,i.Lk)("div",Te,[(0,i.bF)(r,{icon:"chart-line"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.uploadTrend")),1),(0,i.bF)(c,{class:"trend-calendar-btn",circle:"","aria-label":e.$t("sysStatus.selectDateRange"),onClick:l.openTrendDateDialog},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"calendar"})]),_:1},8,["aria-label","onClick"])]),(0,i.Lk)("div",Me,[(0,i.bF)(h,{modelValue:o.trendGroupBy,"onUpdate:modelValue":t[2]||(t[2]=e=>o.trendGroupBy=e),size:"small",class:"trend-group-switch","aria-label":e.$t("sysStatus.uploadTrendGroupBy")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:"channel"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.byChannelType")),1)]),_:1}),(0,i.bF)(d,{label:"channelName"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.byChannelName")),1)]),_:1})]),_:1},8,["modelValue","aria-label"])])]),(0,i.bF)(p,{modelValue:o.trendDatePickerVisible,"onUpdate:modelValue":t[4]||(t[4]=e=>o.trendDatePickerVisible=e),title:e.$t("sysStatus.selectDateRange"),width:l.trendDateDialogWidth,class:"trend-date-dialog","align-center":"","append-to-body":""},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Pe,[(0,i.bF)(u,{modelValue:o.trendDateRange,"onUpdate:modelValue":t[3]||(t[3]=e=>o.trendDateRange=e),onChange:l.handleTrendDateRangeChange},null,8,["modelValue","onChange"])])]),_:1},8,["modelValue","title","width"]),(0,i.Lk)("div",De,[l.hasTrendData?((0,i.uX)(),(0,i.CE)("div",$e,[(0,i.bF)(f,{data:l.uploadTrendChartData,options:l.lineChartOptions},null,8,["data","options"])])):((0,i.uX)(),(0,i.CE)("div",Ae,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)]))])]),(0,i.Lk)("div",Le,[(0,i.Lk)("div",Ve,[(0,i.bF)(r,{icon:"share-alt"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.channelDistribution")),1)]),(0,i.Lk)("div",Ee,[0===Object.keys(o.indexInfo.channelStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Ie,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ue,[(0,i.Lk)("div",Oe,[(0,i.bF)(m,{data:l.channelChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Re,[(0,i.Lk)("div",We,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",Be,(0,n.v_)(e.$t("sysStatus.totalFilesLabel")),1)])]),(0,i.Lk)("div",ze,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.indexInfo.channelStats,(e,t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:t,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getChartColor(s)})},null,4),(0,i.Lk)("span",Ne,(0,n.v_)(t),1),(0,i.Lk)("span",je,(0,n.v_)(e.toLocaleString()),1),(0,i.Lk)("span",He,(0,n.v_)(l.getPercentage(e,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])]),(0,i.Lk)("div",qe,[(0,i.Lk)("div",Xe,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.fileStatusDistribution")),1)]),(0,i.Lk)("div",Ke,[0===Object.keys(o.indexInfo.typeStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Qe,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ye,[(0,i.Lk)("div",Ge,[(0,i.bF)(m,{data:l.typeChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Je,[(0,i.Lk)("div",Ze,(0,n.v_)(Object.keys(o.indexInfo.typeStats).length),1),(0,i.Lk)("div",et,(0,n.v_)(e.$t("sysStatus.statusTypes")),1)])]),(0,i.Lk)("div",tt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.aggregatedTypeStats,(e,t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:t,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getTypeChartColor(s)})},null,4),(0,i.Lk)("span",st,(0,n.v_)(t),1),(0,i.Lk)("span",it,(0,n.v_)(e.toLocaleString()),1),(0,i.Lk)("span",nt,(0,n.v_)(l.getPercentage(e,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])])]),(0,i.Lk)("div",at,[(0,i.Lk)("div",ot,[(0,i.Lk)("div",lt,[(0,i.bF)(r,{icon:"tools"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.systemMaintenance")),1)]),(0,i.Lk)("div",rt,[o.isProcessing?((0,i.uX)(),(0,i.CE)("div",ct,[(0,i.Lk)("div",dt,[(0,i.Lk)("span",ht,(0,n.v_)(l.phaseDescription),1),(0,i.Lk)("span",ut,(0,n.v_)(Math.round(o.processingProgress.percentage))+"%",1)]),(0,i.bF)(b,{percentage:o.processingProgress.percentage,"stroke-width":12,"show-text":!1,class:"progress-bar"},null,8,["percentage"]),(0,i.Lk)("div",pt,[o.processingProgress.current>0?((0,i.uX)(),(0,i.CE)("span",gt,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.eW)(" "+(0,n.v_)(o.processingProgress.current.toLocaleString())+" ",1),o.processingProgress.total>0?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.eW)(" / "+(0,n.v_)(o.processingProgress.total.toLocaleString()),1)],64)):(0,i.Q3)("",!0),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.records")),1)])):(0,i.Q3)("",!0),l.estimatedTimeRemaining?((0,i.uX)(),(0,i.CE)("span",ft,[(0,i.bF)(r,{icon:"clock"}),(0,i.eW)(" "+(0,n.v_)(l.estimatedTimeRemaining),1)])):(0,i.Q3)("",!0)]),o.processingProgress.message?((0,i.uX)(),(0,i.CE)("div",mt,(0,n.v_)(o.processingProgress.message),1)):(0,i.Q3)("",!0),(0,i.bF)(c,{type:"danger",plain:"",size:"small",onClick:l.cancelOperation,class:"cancel-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"times"}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.cancelOperation")),1)]),_:1},8,["onClick"])])):o.processingError?((0,i.uX)(),(0,i.CE)("div",bt,[(0,i.Lk)("div",yt,[(0,i.bF)(r,{icon:"exclamation-triangle"})]),(0,i.Lk)("div",xt,[(0,i.Lk)("div",vt,(0,n.v_)(o.processingError.message),1),o.processingError.suggestion?((0,i.uX)(),(0,i.CE)("div",kt,(0,n.v_)(o.processingError.suggestion),1)):(0,i.Q3)("",!0)]),(0,i.Lk)("div",_t,[o.processingError.recoverable?((0,i.uX)(),(0,i.Wv)(c,{key:0,type:"primary",size:"small",onClick:l.retryOperation},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"redo"}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.retry")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0),(0,i.bF)(c,{type:"default",size:"small",onClick:l.dismissError},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.close")),1)]),_:1},8,["onClick"])])])):((0,i.uX)(),(0,i.CE)("div",wt,[(0,i.bF)(y,{content:e.$t("sysStatus.rebuildTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"primary",loading:o.rebuilding,disabled:o.isProcessing,onClick:l.rebuildIndex,class:"action-btn rebuild-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt"}),(0,i.eW)(" "+(0,n.v_)(o.rebuilding?e.$t("sysStatus.rebuilding"):e.$t("sysStatus.rebuildIndex")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:e.$t("sysStatus.backupTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"success",loading:o.backing,disabled:o.isProcessing,onClick:l.backupData,class:"action-btn backup-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"download"}),(0,i.eW)(" "+(0,n.v_)(o.backing?e.$t("sysStatus.backingUp"):e.$t("sysStatus.backupData")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:e.$t("sysStatus.restoreTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Ct,[(0,i.Lk)("input",{type:"file",ref:"fileInput",accept:".json",onChange:t[5]||(t[5]=(...e)=>l.handleFileSelect&&l.handleFileSelect(...e)),style:{display:"none"}},null,544),(0,i.bF)(c,{type:"warning",loading:o.restoring,disabled:o.isProcessing,onClick:l.selectRestoreFile,class:"action-btn restore-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"upload"}),(0,i.eW)(" "+(0,n.v_)(o.restoring?e.$t("sysStatus.restoring"):e.$t("sysStatus.restoreData")),1)]),_:1},8,["loading","disabled","onClick"])])]),_:1},8,["content"])]))])])]),o.indexInfo.newestFile||o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",St,[o.indexInfo.newestFile?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"file-info-card info-card-newest",onClick:t[8]||(t[8]=e=>l.openFileInNewTab(o.indexInfo.newestFile))},[l.isImageFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:t[6]||(t[6]=e=>l.handleImageError("newest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:t[7]||(t[7]=e=>l.handleImageError("newest"))},null,40,Ft)):((0,i.uX)(),(0,i.CE)("div",Tt,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",Mt,[(0,i.bF)(r,{icon:"arrow-up"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.latestUpload")),1)]),(0,i.Lk)("div",Pt,[(0,i.Lk)("div",Dt,(0,n.v_)(o.indexInfo.newestFile.metadata?.FileName||o.indexInfo.newestFile.id),1),(0,i.Lk)("div",At,(0,n.v_)(l.formatTime(o.indexInfo.newestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0),o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",{key:1,class:"file-info-card info-card-oldest",onClick:t[11]||(t[11]=e=>l.openFileInNewTab(o.indexInfo.oldestFile))},[l.isImageFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:t[9]||(t[9]=e=>l.handleImageError("oldest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:t[10]||(t[10]=e=>l.handleImageError("oldest"))},null,40,$t)):((0,i.uX)(),(0,i.CE)("div",Lt,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",Vt,[(0,i.bF)(r,{icon:"arrow-down"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.earliestUpload")),1)]),(0,i.Lk)("div",Et,[(0,i.Lk)("div",It,(0,n.v_)(o.indexInfo.oldestFile.metadata?.FileName||o.indexInfo.oldestFile.id),1),(0,i.Lk)("div",Ut,(0,n.v_)(l.formatTime(o.indexInfo.oldestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0)])):(0,i.Q3)("",!0)])),[[C,o.loading]])}s(18111),s(7588),s(61701),s(18237),s(17642),s(58004),s(33853),s(45876),s(32475),s(15024),s(31698);var Rt=s(70797),Wt={rE:"2.7.6"},Bt=(s(20116),s(91114));s(22489),s(13579); +"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[757],{2893:function(e,t,s){s(85331)},3261:function(e,t,s){s(85331)},4885:function(e,t,s){s(85331)},5802:function(e,t,s){s(85331),s(38736),s(213),s(85970)},15616:function(e,t,s){s(85331),s(97197)},34396:function(e,t,s){s(85331),s(4885)},49187:function(e,t,s){s(85331),s(38736)},50333:function(e,t,s){s(85331),s(29092)},55757:function(e,t,s){s.r(t),s.d(t,{default:function(){return cf}});var i=s(56768),n=s(24232);const a={class:"menu-list"},o=["onClick"],l={class:"menu-text"};function r(e,t,s,r,c,d){const h=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["sidebar-container",{"is-collapsed":s.isCollapse}]),ref:"sidebar",style:(0,n.Tr)(d.sidebarStyle)},[(0,i.Lk)("div",a,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(c.menuItems,t=>((0,i.uX)(),(0,i.CE)("div",{key:t.index,class:(0,n.C4)(["menu-item",{"is-active":s.activeIndex===t.index}]),onClick:e=>d.handleSelect(t.index)},[(0,i.bF)(h,{icon:t.icon,class:"menu-icon"},null,8,["icon"]),(0,i.Lk)("span",l,(0,n.v_)(e.$t(t.titleKey)),1)],10,o))),128))]),(0,i.Lk)("div",{class:"toggle-button",onClick:t[0]||(t[0]=(...e)=>d.toggleCollapse&&d.toggleCollapse(...e))},[(0,i.bF)(h,{icon:s.isCollapse?"angle-double-right":"angle-double-left"},null,8,["icon"])])],6)}var c={name:"SysConfigTabs",props:{activeIndex:{type:String,default:"status"},isCollapse:{type:Boolean,default:!1}},data(){return{expandedWidth:null,menuItems:[{index:"status",icon:"chart-bar",titleKey:"sysConfigTabs.systemStatus"},{index:"upload",icon:"cloud-upload",titleKey:"sysConfigTabs.uploadSettings"},{index:"security",icon:"shield",titleKey:"sysConfigTabs.securitySettings"},{index:"page",icon:"pager",titleKey:"sysConfigTabs.pageSettings"},{index:"others",icon:"cog",titleKey:"sysConfigTabs.otherSettings"}]}},computed:{collapsedWidth(){return window.innerWidth<=768?50:56},sidebarStyle(){return this.isCollapse?{width:this.collapsedWidth+"px"}:this.expandedWidth?{width:this.expandedWidth+"px"}:{}}},watch:{"$i18n.locale"(){this.$nextTick(()=>this.measureWidth())}},methods:{toggleCollapse(){this.$emit("update:isCollapse",!this.isCollapse)},checkMobile(){const e=window.innerWidth<=768;this.$emit("update:isCollapse",e)},handleSelect(e){this.$emit("update:activeIndex",e)},measureWidth(){const e=this.$refs.sidebar;if(!e)return;const t=e.style.width,s=e.style.transition,i=e.classList.contains("is-collapsed");e.style.transition="none",i&&e.classList.remove("is-collapsed"),e.style.width="auto",e.offsetWidth;const n=e.scrollWidth;e.style.width=t,i&&e.classList.add("is-collapsed"),e.offsetWidth,e.style.transition=s,this.expandedWidth=n}},mounted(){this.checkMobile(),this.$nextTick(()=>this.measureWidth()),window.addEventListener("resize",this.checkMobile)},beforeDestroy(){window.removeEventListener("resize",this.checkMobile)}},d=s(71241);const h=(0,d.A)(c,[["render",r],["__scopeId","data-v-418ec867"]]);var u=h,p=s(54880),g=(s(85331),s(77128),s(78507)),f=(s(213),s(20620));const m={class:"container"},b={class:"header-content admin-header-content"},y={class:"header-action"};function x(e,t,s,a,o,l){const r=f.A,c=(0,i.g2)("font-awesome-icon"),d=g.R7,h=p.bZ,x=u;return(0,i.uX)(),(0,i.CE)("div",m,[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",b,[(0,i.bF)(r,{activeTab:"systemConfig"}),(0,i.Lk)("div",y,[(0,i.bF)(d,{disabled:l.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{icon:"sign-out-alt",class:"header-icon",onClick:l.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,i.bF)(x,{activeIndex:o.activeIndex,"onUpdate:activeIndex":t[0]||(t[0]=e=>o.activeIndex=e),isCollapse:o.isSidebarCollapse,"onUpdate:isCollapse":t[1]||(t[1]=e=>o.isSidebarCollapse=e)},null,8,["activeIndex","isCollapse"]),((0,i.uX)(),(0,i.Wv)((0,i.$y)(l.currentComponent),{class:(0,n.C4)(["main-container",{collapsed:o.isSidebarCollapse}])},null,8,["class"]))])}s(44114);var v=s(99114),k=(s(30694),s(57009)),_=(s(78450),s(69655)),w=(s(2893),s(9267)),C=(s(15616),s(45130));const S={class:"date-range-calendar"},F={class:"selected-range"},T={class:"selected-range-inputs"},M=["aria-label"],P={class:"date-range-separator"},D=["aria-label"],A={class:"calendar-header"},$=["aria-label"],L={class:"calendar-title"},V=["aria-label"],E={class:"calendar-weekdays"},I={class:"calendar-grid"},U=["onClick"];function O(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",S,[(0,i.Lk)("div",F,[(0,i.Lk)("div",T,[(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>o.inputStart=e),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.startDateLabel,onChange:t[1]||(t[1]=(...e)=>l.handleManualInput&&l.handleManualInput(...e))},null,40,M),[[C.Jo,o.inputStart,void 0,{trim:!0}]]),(0,i.Lk)("span",P,(0,n.v_)(l.rangeSeparator),1),(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":t[2]||(t[2]=e=>o.inputEnd=e),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.endDateLabel,onChange:t[3]||(t[3]=(...e)=>l.handleManualInput&&l.handleManualInput(...e))},null,40,D),[[C.Jo,o.inputEnd,void 0,{trim:!0}]])])]),(0,i.Lk)("div",A,[(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.previousMonthLabel,onClick:t[4]||(t[4]=(...e)=>l.goToPreviousMonth&&l.goToPreviousMonth(...e))},[(0,i.bF)(r,{icon:"chevron-left"})],8,$),(0,i.Lk)("div",L,(0,n.v_)(l.monthTitle),1),(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.nextMonthLabel,onClick:t[5]||(t[5]=(...e)=>l.goToNextMonth&&l.goToNextMonth(...e))},[(0,i.bF)(r,{icon:"chevron-right"})],8,V)]),(0,i.Lk)("div",E,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.weekdayLabels,e=>((0,i.uX)(),(0,i.CE)("span",{key:e},(0,n.v_)(e),1))),128))]),(0,i.Lk)("div",I,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.calendarDays,e=>((0,i.uX)(),(0,i.CE)("button",{key:e.key,type:"button",class:(0,n.C4)(["calendar-day",{"is-muted":!e.isCurrentMonth,"is-today":e.isToday,"is-range-start":e.key===o.draftStart,"is-range-end":e.key===o.draftEnd,"is-in-range":l.isInRange(e.key)}]),onClick:t=>l.selectDay(e.key)},(0,n.v_)(e.dayOfMonth),11,U))),128))])])}const R=864e5;function W(e){return String(e).padStart(2,"0")}function B(e){return`${e.getFullYear()}-${W(e.getMonth()+1)}-${W(e.getDate())}`}function z(e){if("string"!==typeof e)return null;const t=e.trim().match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);if(!t)return null;const s=Number(t[1]),i=Number(t[2])-1,n=Number(t[3]),a=new Date(s,i,n);return a.getFullYear()!==s||a.getMonth()!==i||a.getDate()!==n?null:(a.setHours(0,0,0,0),a)}function N(e,t){return new Date(e.getFullYear(),e.getMonth()+t,1)}var j={name:"DateRangeCalendar",props:{modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue","change"],data(){const e=new Date;return e.setHours(0,0,0,0),{displayYear:e.getFullYear(),displayMonth:e.getMonth(),draftStart:"",draftEnd:"",inputStart:"",inputEnd:"",awaitingEnd:!1}},computed:{previousMonthLabel(){return this.$t("dateRangeCalendar.previousMonth")},nextMonthLabel(){return this.$t("dateRangeCalendar.nextMonth")},startDateLabel(){return this.$t("dateRangeCalendar.startDate")},endDateLabel(){return this.$t("dateRangeCalendar.endDate")},rangeSeparator(){return this.$t("dateRangeCalendar.rangeSeparator")},monthTitle(){return this.$t("dateRangeCalendar.monthTitle",{year:this.displayYear,month:W(this.displayMonth+1)})},weekdayLabels(){return[this.$t("dateRangeCalendar.weekdaySun"),this.$t("dateRangeCalendar.weekdayMon"),this.$t("dateRangeCalendar.weekdayTue"),this.$t("dateRangeCalendar.weekdayWed"),this.$t("dateRangeCalendar.weekdayThu"),this.$t("dateRangeCalendar.weekdayFri"),this.$t("dateRangeCalendar.weekdaySat")]},calendarDays(){const e=new Date(this.displayYear,this.displayMonth,1),t=new Date(this.displayYear,this.displayMonth,1-e.getDay()),s=B(new Date);return Array.from({length:42},(e,i)=>{const n=new Date(t.getTime()+i*R),a=B(n);return{key:a,dayOfMonth:n.getDate(),isCurrentMonth:n.getMonth()===this.displayMonth,isToday:a===s}})}},watch:{modelValue:{immediate:!0,handler(e){this.syncFromModel(e)}}},methods:{syncFromModel(e){const t=z(e?.[0]),s=z(e?.[1]);this.draftStart=t?B(t):"",this.draftEnd=s?B(s):"",this.inputStart=this.draftStart,this.inputEnd=this.draftEnd,this.awaitingEnd=!1;const i=t||s;i&&(this.displayYear=i.getFullYear(),this.displayMonth=i.getMonth())},goToPreviousMonth(){const e=N(new Date(this.displayYear,this.displayMonth,1),-1);this.displayYear=e.getFullYear(),this.displayMonth=e.getMonth()},goToNextMonth(){const e=N(new Date(this.displayYear,this.displayMonth,1),1);this.displayYear=e.getFullYear(),this.displayMonth=e.getMonth()},selectDay(e){if(!this.draftStart||this.draftEnd||!this.awaitingEnd)return this.draftStart=e,this.draftEnd="",this.inputStart=e,this.inputEnd="",void(this.awaitingEnd=!0);const t=ethis.draftStart&&el.fetchIndexInfo&&l.fetchIndexInfo(...e))},[(0,i.Lk)("div",re,[(0,i.bF)(r,{icon:"database"})]),(0,i.Lk)("div",ce,[(0,i.Lk)("div",de,(0,n.v_)(e.$t("sysStatus.totalFiles")),1),(0,i.Lk)("div",he,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",ue,(0,n.v_)(e.$t("sysStatus.clickToRefresh")),1)])]),(0,i.Lk)("div",pe,[(0,i.Lk)("div",ge,[(0,i.bF)(r,{icon:"clock"})]),(0,i.Lk)("div",fe,[(0,i.Lk)("div",me,(0,n.v_)(e.$t("sysStatus.indexUpdateTime")),1),(0,i.Lk)("div",be,(0,n.v_)(l.formatTime(o.indexInfo.lastUpdated)),1),(0,i.Lk)("div",ye,(0,n.v_)(l.getTimeAgo(o.indexInfo.lastUpdated)),1)])]),(0,i.Lk)("div",{class:"overview-card system-version",onClick:t[1]||(t[1]=(...e)=>l.openReleases&&l.openReleases(...e))},[(0,i.Lk)("div",xe,[(0,i.bF)(r,{icon:"code-branch"})]),(0,i.Lk)("div",ve,[(0,i.Lk)("div",ke,(0,n.v_)(e.$t("sysStatus.systemVersion")),1),(0,i.Lk)("div",_e,"v"+(0,n.v_)(o.version),1),(0,i.Lk)("div",we,(0,n.v_)(e.$t("sysStatus.clickToViewChangelog")),1)])])]),(0,i.Lk)("div",Ce,[(0,i.Lk)("div",Se,[(0,i.Lk)("div",Fe,[(0,i.Lk)("div",Te,[(0,i.bF)(r,{icon:"chart-line"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.uploadTrend")),1),(0,i.bF)(c,{class:"trend-calendar-btn",circle:"","aria-label":e.$t("sysStatus.selectDateRange"),onClick:l.openTrendDateDialog},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"calendar"})]),_:1},8,["aria-label","onClick"])]),(0,i.Lk)("div",Me,[(0,i.bF)(h,{modelValue:o.trendGroupBy,"onUpdate:modelValue":t[2]||(t[2]=e=>o.trendGroupBy=e),size:"small",class:"trend-group-switch","aria-label":e.$t("sysStatus.uploadTrendGroupBy")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:"channel"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.byChannelType")),1)]),_:1}),(0,i.bF)(d,{label:"channelName"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.byChannelName")),1)]),_:1})]),_:1},8,["modelValue","aria-label"])])]),(0,i.bF)(p,{modelValue:o.trendDatePickerVisible,"onUpdate:modelValue":t[4]||(t[4]=e=>o.trendDatePickerVisible=e),title:e.$t("sysStatus.selectDateRange"),width:l.trendDateDialogWidth,class:"trend-date-dialog","align-center":"","append-to-body":""},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Pe,[(0,i.bF)(u,{modelValue:o.trendDateRange,"onUpdate:modelValue":t[3]||(t[3]=e=>o.trendDateRange=e),onChange:l.handleTrendDateRangeChange},null,8,["modelValue","onChange"])])]),_:1},8,["modelValue","title","width"]),(0,i.Lk)("div",De,[l.hasTrendData?((0,i.uX)(),(0,i.CE)("div",$e,[(0,i.bF)(f,{data:l.uploadTrendChartData,options:l.lineChartOptions},null,8,["data","options"])])):((0,i.uX)(),(0,i.CE)("div",Ae,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)]))])]),(0,i.Lk)("div",Le,[(0,i.Lk)("div",Ve,[(0,i.bF)(r,{icon:"share-alt"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.channelDistribution")),1)]),(0,i.Lk)("div",Ee,[0===Object.keys(o.indexInfo.channelStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Ie,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ue,[(0,i.Lk)("div",Oe,[(0,i.bF)(m,{data:l.channelChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Re,[(0,i.Lk)("div",We,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",Be,(0,n.v_)(e.$t("sysStatus.totalFilesLabel")),1)])]),(0,i.Lk)("div",ze,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.indexInfo.channelStats,(e,t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:t,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getChartColor(s)})},null,4),(0,i.Lk)("span",Ne,(0,n.v_)(t),1),(0,i.Lk)("span",je,(0,n.v_)(e.toLocaleString()),1),(0,i.Lk)("span",He,(0,n.v_)(l.getPercentage(e,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])]),(0,i.Lk)("div",qe,[(0,i.Lk)("div",Xe,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.fileStatusDistribution")),1)]),(0,i.Lk)("div",Ke,[0===Object.keys(o.indexInfo.typeStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Qe,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ye,[(0,i.Lk)("div",Ge,[(0,i.bF)(m,{data:l.typeChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Je,[(0,i.Lk)("div",Ze,(0,n.v_)(Object.keys(o.indexInfo.typeStats).length),1),(0,i.Lk)("div",et,(0,n.v_)(e.$t("sysStatus.statusTypes")),1)])]),(0,i.Lk)("div",tt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.aggregatedTypeStats,(e,t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:t,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getTypeChartColor(s)})},null,4),(0,i.Lk)("span",st,(0,n.v_)(t),1),(0,i.Lk)("span",it,(0,n.v_)(e.toLocaleString()),1),(0,i.Lk)("span",nt,(0,n.v_)(l.getPercentage(e,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])])]),(0,i.Lk)("div",at,[(0,i.Lk)("div",ot,[(0,i.Lk)("div",lt,[(0,i.bF)(r,{icon:"tools"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.systemMaintenance")),1)]),(0,i.Lk)("div",rt,[o.isProcessing?((0,i.uX)(),(0,i.CE)("div",ct,[(0,i.Lk)("div",dt,[(0,i.Lk)("span",ht,(0,n.v_)(l.phaseDescription),1),(0,i.Lk)("span",ut,(0,n.v_)(Math.round(o.processingProgress.percentage))+"%",1)]),(0,i.bF)(b,{percentage:o.processingProgress.percentage,"stroke-width":12,"show-text":!1,class:"progress-bar"},null,8,["percentage"]),(0,i.Lk)("div",pt,[o.processingProgress.current>0?((0,i.uX)(),(0,i.CE)("span",gt,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.eW)(" "+(0,n.v_)(o.processingProgress.current.toLocaleString())+" ",1),o.processingProgress.total>0?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.eW)(" / "+(0,n.v_)(o.processingProgress.total.toLocaleString()),1)],64)):(0,i.Q3)("",!0),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.records")),1)])):(0,i.Q3)("",!0),l.estimatedTimeRemaining?((0,i.uX)(),(0,i.CE)("span",ft,[(0,i.bF)(r,{icon:"clock"}),(0,i.eW)(" "+(0,n.v_)(l.estimatedTimeRemaining),1)])):(0,i.Q3)("",!0)]),o.processingProgress.message?((0,i.uX)(),(0,i.CE)("div",mt,(0,n.v_)(o.processingProgress.message),1)):(0,i.Q3)("",!0),(0,i.bF)(c,{type:"danger",plain:"",size:"small",onClick:l.cancelOperation,class:"cancel-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"times"}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.cancelOperation")),1)]),_:1},8,["onClick"])])):o.processingError?((0,i.uX)(),(0,i.CE)("div",bt,[(0,i.Lk)("div",yt,[(0,i.bF)(r,{icon:"exclamation-triangle"})]),(0,i.Lk)("div",xt,[(0,i.Lk)("div",vt,(0,n.v_)(o.processingError.message),1),o.processingError.suggestion?((0,i.uX)(),(0,i.CE)("div",kt,(0,n.v_)(o.processingError.suggestion),1)):(0,i.Q3)("",!0)]),(0,i.Lk)("div",_t,[o.processingError.recoverable?((0,i.uX)(),(0,i.Wv)(c,{key:0,type:"primary",size:"small",onClick:l.retryOperation},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"redo"}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysStatus.retry")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0),(0,i.bF)(c,{type:"default",size:"small",onClick:l.dismissError},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysStatus.close")),1)]),_:1},8,["onClick"])])])):((0,i.uX)(),(0,i.CE)("div",wt,[(0,i.bF)(y,{content:e.$t("sysStatus.rebuildTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"primary",loading:o.rebuilding,disabled:o.isProcessing,onClick:l.rebuildIndex,class:"action-btn rebuild-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt"}),(0,i.eW)(" "+(0,n.v_)(o.rebuilding?e.$t("sysStatus.rebuilding"):e.$t("sysStatus.rebuildIndex")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:e.$t("sysStatus.backupTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"success",loading:o.backing,disabled:o.isProcessing,onClick:l.backupData,class:"action-btn backup-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"download"}),(0,i.eW)(" "+(0,n.v_)(o.backing?e.$t("sysStatus.backingUp"):e.$t("sysStatus.backupData")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:e.$t("sysStatus.restoreTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Ct,[(0,i.Lk)("input",{type:"file",ref:"fileInput",accept:".json",onChange:t[5]||(t[5]=(...e)=>l.handleFileSelect&&l.handleFileSelect(...e)),style:{display:"none"}},null,544),(0,i.bF)(c,{type:"warning",loading:o.restoring,disabled:o.isProcessing,onClick:l.selectRestoreFile,class:"action-btn restore-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"upload"}),(0,i.eW)(" "+(0,n.v_)(o.restoring?e.$t("sysStatus.restoring"):e.$t("sysStatus.restoreData")),1)]),_:1},8,["loading","disabled","onClick"])])]),_:1},8,["content"])]))])])]),o.indexInfo.newestFile||o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",St,[o.indexInfo.newestFile?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"file-info-card info-card-newest",onClick:t[8]||(t[8]=e=>l.openFileInNewTab(o.indexInfo.newestFile))},[l.isImageFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:t[6]||(t[6]=e=>l.handleImageError("newest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:t[7]||(t[7]=e=>l.handleImageError("newest"))},null,40,Ft)):((0,i.uX)(),(0,i.CE)("div",Tt,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",Mt,[(0,i.bF)(r,{icon:"arrow-up"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.latestUpload")),1)]),(0,i.Lk)("div",Pt,[(0,i.Lk)("div",Dt,(0,n.v_)(o.indexInfo.newestFile.metadata?.FileName||o.indexInfo.newestFile.id),1),(0,i.Lk)("div",At,(0,n.v_)(l.formatTime(o.indexInfo.newestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0),o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",{key:1,class:"file-info-card info-card-oldest",onClick:t[11]||(t[11]=e=>l.openFileInNewTab(o.indexInfo.oldestFile))},[l.isImageFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:t[9]||(t[9]=e=>l.handleImageError("oldest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:t[10]||(t[10]=e=>l.handleImageError("oldest"))},null,40,$t)):((0,i.uX)(),(0,i.CE)("div",Lt,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",Vt,[(0,i.bF)(r,{icon:"arrow-down"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysStatus.earliestUpload")),1)]),(0,i.Lk)("div",Et,[(0,i.Lk)("div",It,(0,n.v_)(o.indexInfo.oldestFile.metadata?.FileName||o.indexInfo.oldestFile.id),1),(0,i.Lk)("div",Ut,(0,n.v_)(l.formatTime(o.indexInfo.oldestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0)])):(0,i.Q3)("",!0)])),[[C,o.loading]])}s(18111),s(7588),s(61701),s(18237),s(17642),s(58004),s(33853),s(45876),s(32475),s(15024),s(31698);var Rt=s(70797),Wt={rE:"2.7.6"},Bt=(s(20116),s(91114));s(22489),s(13579); /*! * @kurkle/color v0.3.4 * https://github.com/kurkle/color#readme @@ -19,5 +19,5 @@ function Ls(){}const Vs=(()=>{let e=0;return()=>e++})();function Es(e){return nu * (c) 2025 Chart.js Contributors * Released under the MIT License */ -class po{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,t,s,i){const n=t.listeners[i],a=t.duration;n.forEach(i=>i({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(s-t.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Ni.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((s,i)=>{if(!s.running||!s.items.length)return;const n=s.items;let a,o=n.length-1,l=!1;for(;o>=0;--o)a=n[o],a._active?(a._total>s.duration&&(s.duration=a._total),a.tick(e),l=!0):(n[o]=n[n.length-1],n.pop());l&&(i.draw(),this._notify(i,s,e,"progress")),n.length||(s.running=!1,this._notify(i,s,e,"complete"),s.initial=!1),t+=n.length}),this._lastDate=e,0===t&&(this._running=!1)}_getAnims(e){const t=this._charts;let s=t.get(e);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,s)),s}listen(e,t,s){this._getAnims(e).listeners[t].push(s)}add(e,t){t&&t.length&&this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){const t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;const t=this._charts.get(e);return!!(t&&t.running&&t.items.length)}stop(e){const t=this._charts.get(e);if(!t||!t.items.length)return;const s=t.items;let i=s.length-1;for(;i>=0;--i)s[i].cancel();t.items=[],this._notify(e,t,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var go=new po;const fo="transparent",mo={boolean(e,t,s){return s>.5?t:e},color(e,t,s){const i=sn(e||fo),n=i.valid&&sn(t||fo);return n&&n.valid?n.mix(i,s).hexString():t},number(e,t,s){return e+(t-e)*s}};class bo{constructor(e,t,s,i){const n=t[s];i=Kn([e.to,i,n,e.from]);const a=Kn([e.from,n,i]);this._active=!0,this._fn=e.fn||mo[e.type||typeof a],this._easing=en[e.easing]||en.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=s,this._from=a,this._to=i,this._promises=void 0}active(){return this._active}update(e,t,s){if(this._active){this._notify(!1);const i=this._target[this._prop],n=s-this._start,a=this._duration-n;this._start=s,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=n,this._loop=!!e.loop,this._to=Kn([e.to,t,i,e.from]),this._from=Kn([e.from,i,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const t=e-this._start,s=this._duration,i=this._prop,n=this._from,a=this._loop,o=this._to;let l;if(this._active=n!==o&&(a||t1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[i]=this._fn(n,o,l))}wait(){const e=this._promises||(this._promises=[]);return new Promise((t,s)=>{e.push({res:t,rej:s})})}_notify(e){const t=e?"res":"rej",s=this._promises||[];for(let i=0;i{const n=e[i];if(!Us(n))return;const a={};for(const e of t)a[e]=n[e];(Is(n.properties)&&n.properties||[i]).forEach(e=>{e!==i&&s.has(e)||s.set(e,a)})})}_animateOptions(e,t){const s=t.options,i=vo(e,s);if(!i)return[];const n=this._createAnimations(i,s);return s.$shared&&xo(e.options.$animations,s).then(()=>{e.options=s},()=>{}),n}_createAnimations(e,t){const s=this._properties,i=[],n=e.$animations||(e.$animations={}),a=Object.keys(t),o=Date.now();let l;for(l=a.length-1;l>=0;--l){const r=a[l];if("$"===r.charAt(0))continue;if("options"===r){i.push(...this._animateOptions(e,t));continue}const c=t[r];let d=n[r];const h=s.get(r);if(d){if(h&&d.active()){d.update(h,c,o);continue}d.cancel()}h&&h.duration?(n[r]=d=new bo(h,e,r,c),i.push(d)):e[r]=c}return i}update(e,t){if(0===this._properties.size)return void Object.assign(e,t);const s=this._createAnimations(e,t);return s.length?(go.add(this._chart,s),!0):void 0}}function xo(e,t){const s=[],i=Object.keys(t);for(let n=0;n0||!s&&t<0)return n.index}return null}function $o(e,t){const{chart:s,_cachedMeta:i}=e,n=s._stacks||(s._stacks={}),{iScale:a,vScale:o,index:l}=i,r=a.axis,c=o.axis,d=Mo(a,o,i),h=t.length;let u;for(let p=0;ps[e].axis===t).shift()}function Vo(e,t){return Yn(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Eo(e,t,s){return Yn(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:s,index:t,mode:"default",type:"data"})}function Io(e,t){const s=e.controller.index,i=e.vScale&&e.vScale.axis;if(i){t=t||e._parsed;for(const e of t){const t=e._stacks;if(!t||void 0===t[i]||void 0===t[i][s])return;delete t[i][s],void 0!==t[i]._visualValues&&void 0!==t[i]._visualValues[s]&&delete t[i]._visualValues[s]}}}const Uo=e=>"reset"===e||"none"===e,Oo=(e,t)=>t?e:Object.assign({},e),Ro=(e,t,s)=>e&&!t.hidden&&t._stacked&&{keys:Co(s,!0),values:null};class Wo{constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=To(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(e){this.index!==e&&Io(this._cachedMeta),this.index=e}linkScales(){const e=this.chart,t=this._cachedMeta,s=this.getDataset(),i=(e,t,s,i)=>"x"===e?t:"r"===e?i:s,n=t.xAxisID=Ws(s.xAxisID,Lo(e,"x")),a=t.yAxisID=Ws(s.yAxisID,Lo(e,"y")),o=t.rAxisID=Ws(s.rAxisID,Lo(e,"r")),l=t.indexAxis,r=t.iAxisID=i(l,n,a,o),c=t.vAxisID=i(l,a,n,o);t.xScale=this.getScaleForId(n),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(r),t.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){const t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update("reset")}_destroy(){const e=this._cachedMeta;this._data&&Bi(this._data,this),e._stacked&&Io(e)}_dataCheck(){const e=this.getDataset(),t=e.data||(e.data=[]),s=this._data;if(Us(t)){const e=this._cachedMeta;this._data=Fo(t,e)}else if(s!==t){if(s){Bi(s,this);const e=this._cachedMeta;Io(e),e._parsed=[]}t&&Object.isExtensible(t)&&Wi(t,this),this._syncList=[],this._data=t}}addElements(){const e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){const t=this._cachedMeta,s=this.getDataset();let i=!1;this._dataCheck();const n=t._stacked;t._stacked=To(t.vScale,t),t.stack!==s.stack&&(i=!0,Io(t),t.stack=s.stack),this._resyncElements(e),(i||n!==t._stacked)&&($o(this,t._parsed),t._stacked=To(t.vScale,t))}configure(){const e=this.chart.config,t=e.datasetScopeKeys(this._type),s=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){const{_cachedMeta:s,_data:i}=this,{iScale:n,_stacked:a}=s,o=n.axis;let l,r,c,d=0===e&&t===i.length||s._sorted,h=e>0&&s._parsed[e-1];if(!1===this._parsing)s._parsed=i,s._sorted=!0,c=i;else{c=Is(i[e])?this.parseArrayData(s,i,e,t):Us(i[e])?this.parseObjectData(s,i,e,t):this.parsePrimitiveData(s,i,e,t);const n=()=>null===r[o]||h&&r[o]t||d=0;--h)if(!p()){this.updateRangeFromParsed(r,e,u,l);break}return r}getAllParsedValues(e){const t=this._cachedMeta._parsed,s=[];let i,n,a;for(i=0,n=t.length;i=0&&ethis.getContext(s,i,t),g=r.resolveNamedOptions(h,u,p,d);return g.$shared&&(g.$shared=l,n[a]=Object.freeze(Oo(g,l))),g}_resolveAnimations(e,t,s){const i=this.chart,n=this._cachedDataOpts,a=`animation-${t}`,o=n[a];if(o)return o;let l;if(!1!==i.options.animation){const i=this.chart.config,n=i.datasetAnimationScopeKeys(this._type,t),a=i.getOptionScopes(this.getDataset(),n);l=i.createResolver(a,this.getContext(e,s,t))}const r=new yo(i,l&&l.animations);return l&&l._cacheable&&(n[a]=Object.freeze(r)),r}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,t){return!t||Uo(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){const s=this.resolveDataElementOptions(e,t),i=this._sharedOptions,n=this.getSharedOptions(s),a=this.includeOptions(t,n)||n!==i;return this.updateSharedOptions(n,t,s),{sharedOptions:n,includeOptions:a}}updateElement(e,t,s,i){Uo(i)?Object.assign(e,s):this._resolveAnimations(t,i).update(e,s)}updateSharedOptions(e,t,s){e&&!Uo(t)&&this._resolveAnimations(void 0,t).update(e,s)}_setStyle(e,t,s,i){e.active=i;const n=this.getStyle(t,i);this._resolveAnimations(t,s,i).update(e,{options:!i&&this.getSharedOptions(n)||n})}removeHoverStyle(e,t,s){this._setStyle(e,s,"active",!1)}setHoverStyle(e,t,s){this._setStyle(e,s,"active",!0)}_removeDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){const t=this._data,s=this._cachedMeta.data;for(const[o,l,r]of this._syncList)this[o](l,r);this._syncList=[];const i=s.length,n=t.length,a=Math.min(n,i);a&&this.parse(0,a),n>i?this._insertElements(i,n-i,e):n{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(l(n),o=e;oe-t))}return e._cache.$bar}function zo(e){const t=e.iScale,s=Bo(t,e.type);let i,n,a,o,l=t._length;const r=()=>{32767!==a&&-32768!==a&&(ii(o)&&(l=Math.min(l,Math.abs(a-o)||l)),o=a)};for(i=0,n=s.length;i0?n[e-1]:null,l=eMath.abs(l)&&(r=l,c=o),t[s.axis]=c,t._custom={barStart:r,barEnd:c,start:n,end:a,min:o,max:l}}function qo(e,t,s,i){return Is(e)?Ho(e,t,s,i):t[s.axis]=s.parse(e,i),t}function Xo(e,t,s,i){const n=e.iScale,a=e.vScale,o=n.getLabels(),l=n===a,r=[];let c,d,h,u;for(c=s,d=s+i;c=s?1:-1)}function Yo(e){let t,s,i,n,a;return e.horizontal?(t=e.base>e.x,s="left",i="right"):(t=e.basee.controller.options.grouped),n=s.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),l=o&&o[s.axis],r=e=>{const t=e._parsed.find(e=>e[s.axis]===l),i=t&&t[e.vScale.axis];if(Es(i)||isNaN(i))return!0};for(const c of i)if((void 0===t||!r(c))&&((!1===n||-1===a.indexOf(c.stack)||void 0===n&&void 0===c.stack)&&a.push(c.stack),c.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(s=>e[s].axis===t).shift()}_getAxis(){const e={},t=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)e[Ws("x"===this.chart.options.indexAxis?s.xAxisID:s.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,s){const i=this._getStacks(e,s),n=void 0!==t?i.indexOf(t):-1;return-1===n?i.length-1:n}_getRuler(){const e=this.options,t=this._cachedMeta,s=t.iScale,i=[];let n,a;for(n=0,a=t.data.length;n=0;--s)t=Math.max(t,e[s].size(this.resolveDataElementOptions(s))/2);return t>0&&t}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart.data.labels||[],{xScale:i,yScale:n}=t,a=this.getParsed(e),o=i.getLabelForValue(a.x),l=n.getLabelForValue(a.y),r=a._custom;return{label:s[e]||"",value:"("+o+", "+l+(r?", "+r:"")+")"}}update(e){const t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,s,i){const n="reset"===i,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:l,includeOptions:r}=this._getSharedOptions(t,i),c=a.axis,d=o.axis;for(let h=t;hAi(e,l,r,!0)?1:Math.max(t,t*s,i,i*s),g=(e,t,i)=>Ai(e,l,r,!0)?-1:Math.min(t,t*s,i,i*s),f=p(0,c,h),m=p(ui,d,u),b=g(li,c,h),y=g(li+ui,d,u);i=(f-b)/2,n=(m-y)/2,a=-(f+b)/2,o=-(m+y)/2}return{ratioX:i,ratioY:n,offsetX:a,offsetY:o}}(0,Bt.A)(il,"id","bubble"),(0,Bt.A)(il,"defaults",{datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}}),(0,Bt.A)(il,"overrides",{scales:{x:{type:"linear"},y:{type:"linear"}}});class al extends Wo{constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){const s=this.getDataset().data,i=this._cachedMeta;if(!1===this._parsing)i._parsed=s;else{let n,a,o=e=>+s[e];if(Us(s[e])){const{key:e="value"}=this._parsing;o=t=>+ti(s[t],e)}for(n=e,a=e+t;n0&&!isNaN(e)?ri*(Math.abs(e)/t):0}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=hn(t._parsed[e],s.options.locale);return{label:i[e]||"",value:n}}getMaxBorderWidth(e){let t=0;const s=this.chart;let i,n,a,o,l;if(!e)for(i=0,n=s.data.datasets.length;i"spacing"!==e,_indexable:e=>"spacing"!==e&&!e.startsWith("borderDash")&&!e.startsWith("hoverBorderDash")}),(0,Bt.A)(al,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const t=e.data,{labels:{pointStyle:s,textAlign:i,color:n,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,l)=>{const r=e.getDatasetMeta(0),c=r.controller.getStyle(l);return{text:t,fillStyle:c.backgroundColor,fontColor:n,hidden:!e.getDataVisibility(l),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:i,pointStyle:s,borderRadius:a&&(o||c.borderRadius),index:l}}):[]}},onClick(e,t,s){s.chart.toggleDataVisibility(t.index),s.chart.update()}}}});class ol extends Wo{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){const t=this._cachedMeta,{dataset:s,data:i=[],_dataset:n}=t,a=this.chart._animationsDisabled;let{start:o,count:l}=Qi(t,i,a);this._drawStart=o,this._drawCount=l,Yi(t)&&(o=0,l=i.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!n._decimated,s.points=i;const r=this.resolveDatasetElementOptions(e);this.options.showLine||(r.borderWidth=0),r.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:r},e),this.updateElements(i,o,l,e)}updateElements(e,t,s,i){const n="reset"===i,{iScale:a,vScale:o,_stacked:l,_dataset:r}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(t,i),h=a.axis,u=o.axis,{spanGaps:p,segment:g}=this.options,f=ki(p)?p:Number.POSITIVE_INFINITY,m=this.chart._animationsDisabled||n||"none"===i,b=t+s,y=e.length;let x=t>0&&this.getParsed(t-1);for(let v=0;v=b){p.skip=!0;continue}const y=this.getParsed(v),k=Es(y[u]),_=p[h]=a.getPixelForValue(y[h],v),w=p[u]=n||k?o.getBasePixel():o.getPixelForValue(l?this.applyStack(o,y,l):y[u],v);p.skip=isNaN(_)||isNaN(w)||k,p.stop=v>0&&Math.abs(y[h]-x[h])>f,g&&(p.parsed=y,p.raw=r.data[v]),d&&(p.options=c||this.resolveDataElementOptions(v,s.active?"active":i)),m||this.updateElement(s,v,p,i),x=y}}getMaxOverflow(){const e=this._cachedMeta,t=e.dataset,s=t.options&&t.options.borderWidth||0,i=e.data||[];if(!i.length)return s;const n=i[0].size(this.resolveDataElementOptions(0)),a=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(s,n,a)/2}draw(){const e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}(0,Bt.A)(ol,"id","line"),(0,Bt.A)(ol,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),(0,Bt.A)(ol,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class ll extends Wo{constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=hn(t._parsed[e].r,s.options.locale);return{label:i[e]||"",value:n}}parseObjectData(e,t,s,i){return ma.bind(this)(e,t,s,i)}update(e){const t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){const e=this._cachedMeta,t={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((e,s)=>{const i=this.getParsed(s).r;!isNaN(i)&&this.chart.getDataVisibility(s)&&(it.max&&(t.max=i))}),t}_updateRadius(){const e=this.chart,t=e.chartArea,s=e.options,i=Math.min(t.right-t.left,t.bottom-t.top),n=Math.max(i/2,0),a=Math.max(s.cutoutPercentage?n/100*s.cutoutPercentage:1,0),o=(n-a)/e.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(e,t,s,i){const n="reset"===i,a=this.chart,o=a.options,l=o.animation,r=this._cachedMeta.rScale,c=r.xCenter,d=r.yCenter,h=r.getIndexAngle(0)-.5*li;let u,p=h;const g=360/this.countVisibleElements();for(u=0;u{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&t++}),t}_computeAngle(e,t,s){return this.chart.getDataVisibility(e)?Ci(this.resolveDataElementOptions(e,t).angle||s):0}}(0,Bt.A)(ll,"id","polarArea"),(0,Bt.A)(ll,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),(0,Bt.A)(ll,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const t=e.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:s,color:i}}=e.legend.options;return t.labels.map((t,n)=>{const a=e.getDatasetMeta(0),o=a.controller.getStyle(n);return{text:t,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:i,lineWidth:o.borderWidth,pointStyle:s,hidden:!e.getDataVisibility(n),index:n}})}return[]}},onClick(e,t,s){s.chart.toggleDataVisibility(t.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class rl extends al{}(0,Bt.A)(rl,"id","pie"),(0,Bt.A)(rl,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class cl extends Wo{getLabelAndValue(e){const t=this._cachedMeta.vScale,s=this.getParsed(e);return{label:t.getLabels()[e],value:""+t.getLabelForValue(s[t.axis])}}parseObjectData(e,t,s,i){return ma.bind(this)(e,t,s,i)}update(e){const t=this._cachedMeta,s=t.dataset,i=t.data||[],n=t.iScale.getLabels();if(s.points=i,"resize"!==e){const t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);const a={_loop:!0,_fullLoop:n.length===i.length,options:t};this.updateElement(s,void 0,a,e)}this.updateElements(i,0,i.length,e)}updateElements(e,t,s,i){const n=this._cachedMeta.rScale,a="reset"===i;for(let o=t;o0&&this.getParsed(t-1);for(let x=t;x0&&Math.abs(s[u]-y[u])>m,f&&(c.parsed=s,c.raw=r.data[x]),h&&(c.options=d||this.resolveDataElementOptions(x,t.active?"active":i)),b||this.updateElement(t,x,c,i),y=s}this.updateSharedOptions(d,i,c)}getMaxOverflow(){const e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let s=t.length-1;s>=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}const s=e.dataset,i=s.options&&s.options.borderWidth||0;if(!t.length)return i;const n=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(i,n,a)/2}}(0,Bt.A)(dl,"id","scatter"),(0,Bt.A)(dl,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),(0,Bt.A)(dl,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});function hl(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class ul{static override(e){Object.assign(ul.prototype,e)}constructor(e){(0,Bt.A)(this,"options",void 0),this.options=e||{}}init(){}formats(){return hl()}parse(){return hl()}format(){return hl()}add(){return hl()}diff(){return hl()}startOf(){return hl()}endOf(){return hl()}}var pl={_date:ul};function gl(e,t,s,i){const{controller:n,data:a,_sorted:o}=e,l=n._cachedMeta.iScale,r=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(l&&t===l.axis&&"r"!==t&&o&&a.length){const o=l._reversePixels?Ui:Ii;if(!i){const i=o(a,t,s);if(r){const{vScale:t}=n._cachedMeta,{_parsed:s}=e,a=s.slice(0,i.lo+1).reverse().findIndex(e=>!Es(e[t.axis]));i.lo-=Math.max(0,a);const o=s.slice(i.hi).findIndex(e=>!Es(e[t.axis]));i.hi+=Math.max(0,o)}return i}if(n._sharedOptions){const e=a[0],i="function"===typeof e.getRange&&e.getRange(t);if(i){const e=o(a,t,s-i),n=o(a,t,s+i);return{lo:e.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function fl(e,t,s,i,n){const a=e.getSortedVisibleDatasetMetas(),o=s[t];for(let l=0,r=a.length;l{e[o]&&e[o](t[s],n)&&(a.push({element:e,datasetIndex:i,index:r}),l=l||e.inRange(t.x,t.y,n))}),i&&!l?[]:a}var _l={evaluateInteractionItems:fl,modes:{index(e,t,s,i){const n=Ia(t,e),a=s.axis||"x",o=s.includeInvisible||!1,l=s.intersect?bl(e,n,a,i,o):vl(e,n,a,!1,i,o),r=[];return l.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{const t=l[0].index,s=e.data[t];s&&!s.skip&&r.push({element:s,datasetIndex:e.index,index:t})}),r):[]},dataset(e,t,s,i){const n=Ia(t,e),a=s.axis||"xy",o=s.includeInvisible||!1;let l=s.intersect?bl(e,n,a,i,o):vl(e,n,a,!1,i,o);if(l.length>0){const t=l[0].datasetIndex,s=e.getDatasetMeta(t).data;l=[];for(let e=0;ee.pos===t)}function Sl(e,t){return e.filter(e=>-1===wl.indexOf(e.pos)&&e.box.axis===t)}function Fl(e,t){return e.sort((e,s)=>{const i=t?s:e,n=t?e:s;return i.weight===n.weight?i.index-n.index:i.weight-n.weight})}function Tl(e){const t=[];let s,i,n,a,o,l;for(s=0,i=(e||[]).length;se.box.fullSize),!0),i=Fl(Cl(t,"left"),!0),n=Fl(Cl(t,"right")),a=Fl(Cl(t,"top"),!0),o=Fl(Cl(t,"bottom")),l=Sl(t,"x"),r=Sl(t,"y");return{fullSize:s,leftAndTop:i.concat(a),rightAndBottom:n.concat(r).concat(o).concat(l),chartArea:Cl(t,"chartArea"),vertical:i.concat(n).concat(r),horizontal:a.concat(o).concat(l)}}function Al(e,t,s,i){return Math.max(e[s],t[s])+Math.max(e[i],t[i])}function $l(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Ll(e,t,s,i){const{pos:n,box:a}=s,o=e.maxPadding;if(!Us(n)){s.size&&(e[n]-=s.size);const t=i[s.stack]||{size:0,count:1};t.size=Math.max(t.size,s.horizontal?a.height:a.width),s.size=t.size/t.count,e[n]+=s.size}a.getPadding&&$l(o,a.getPadding());const l=Math.max(0,t.outerWidth-Al(o,e,"left","right")),r=Math.max(0,t.outerHeight-Al(o,e,"top","bottom")),c=l!==e.w,d=r!==e.h;return e.w=l,e.h=r,s.horizontal?{same:c,other:d}:{same:d,other:c}}function Vl(e){const t=e.maxPadding;function s(s){const i=Math.max(t[s]-e[s],0);return e[s]+=i,i}e.y+=s("top"),e.x+=s("left"),s("right"),s("bottom")}function El(e,t){const s=t.maxPadding;function i(e){const i={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{i[e]=Math.max(t[e],s[e])}),i}return i(e?["left","right"]:["top","bottom"])}function Il(e,t,s,i){const n=[];let a,o,l,r,c,d;for(a=0,o=e.length,c=0;a{"function"===typeof e.beforeLayout&&e.beforeLayout()});const d=r.reduce((e,t)=>t.box.options&&!1===t.box.options.display?e:e+1,0)||1,h=Object.freeze({outerWidth:t,outerHeight:s,padding:n,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/d,hBoxMaxHeight:o/2}),u=Object.assign({},n);$l(u,qn(i));const p=Object.assign({maxPadding:u,w:a,h:o,x:n.left,y:n.top},n),g=Pl(r.concat(c),h);Il(l.fullSize,p,h,g),Il(r,p,h,g),Il(c,p,h,g)&&Il(r,p,h,g),Vl(p),Ol(l.leftAndTop,p,h,g),p.x+=p.w,p.y+=p.h,Ol(l.rightAndBottom,p,h,g),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},js(l.chartArea,t=>{const s=t.box;Object.assign(s,e.chartArea),s.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}};class Wl{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,s){}removeEventListener(e,t,s){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,s,i){return t=Math.max(0,t||e.width),s=s||e.height,{width:t,height:Math.max(0,i?Math.floor(t/i):s)}}isAttached(e){return!0}updateConfig(e){}}class Bl extends Wl{acquireContext(e){return e&&e.getContext&&e.getContext("2d")||null}updateConfig(e){e.options.animation=!1}}const zl="$chartjs",Nl={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},jl=e=>null===e||""===e;function Hl(e,t){const s=e.style,i=e.getAttribute("height"),n=e.getAttribute("width");if(e[zl]={initial:{height:i,width:n,style:{display:s.display,height:s.height,width:s.width}}},s.display=s.display||"block",s.boxSizing=s.boxSizing||"border-box",jl(n)){const t=za(e,"width");void 0!==t&&(e.width=t)}if(jl(i))if(""===e.style.height)e.height=e.width/(t||2);else{const t=za(e,"height");void 0!==t&&(e.height=t)}return e}const ql=!!Ba&&{passive:!0};function Xl(e,t,s){e&&e.addEventListener(t,s,ql)}function Kl(e,t,s){e&&e.canvas&&e.canvas.removeEventListener(t,s,ql)}function Ql(e,t){const s=Nl[e.type]||e.type,{x:i,y:n}=Ia(e,t);return{type:s,chart:t,native:e,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Yl(e,t){for(const s of e)if(s===t||s.contains(t))return!0}function Gl(e,t,s){const i=e.canvas,n=new MutationObserver(e=>{let t=!1;for(const s of e)t=t||Yl(s.addedNodes,i),t=t&&!Yl(s.removedNodes,i);t&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}function Jl(e,t,s){const i=e.canvas,n=new MutationObserver(e=>{let t=!1;for(const s of e)t=t||Yl(s.removedNodes,i),t=t&&!Yl(s.addedNodes,i);t&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}const Zl=new Map;let er=0;function tr(){const e=window.devicePixelRatio;e!==er&&(er=e,Zl.forEach((t,s)=>{s.currentDevicePixelRatio!==e&&t()}))}function sr(e,t){Zl.size||window.addEventListener("resize",tr),Zl.set(e,t)}function ir(e){Zl.delete(e),Zl.size||window.removeEventListener("resize",tr)}function nr(e,t,s){const i=e.canvas,n=i&&Ma(i);if(!n)return;const a=ji((e,t)=>{const i=n.clientWidth;s(e,t),i{const t=e[0],s=t.contentRect.width,i=t.contentRect.height;0===s&&0===i||a(s,i)});return o.observe(n),sr(e,a),o}function ar(e,t,s){s&&s.disconnect(),"resize"===t&&ir(e)}function or(e,t,s){const i=e.canvas,n=ji(t=>{null!==e.ctx&&s(Ql(t,e))},e);return Xl(i,t,n),n}class lr extends Wl{acquireContext(e,t){const s=e&&e.getContext&&e.getContext("2d");return s&&s.canvas===e?(Hl(e,t),s):null}releaseContext(e){const t=e.canvas;if(!t[zl])return!1;const s=t[zl].initial;["height","width"].forEach(e=>{const i=s[e];Es(i)?t.removeAttribute(e):t.setAttribute(e,i)});const i=s.style||{};return Object.keys(i).forEach(e=>{t.style[e]=i[e]}),t.width=t.width,delete t[zl],!0}addEventListener(e,t,s){this.removeEventListener(e,t);const i=e.$proxies||(e.$proxies={}),n={attach:Gl,detach:Jl,resize:nr},a=n[t]||or;i[t]=a(e,t,s)}removeEventListener(e,t){const s=e.$proxies||(e.$proxies={}),i=s[t];if(!i)return;const n={attach:ar,detach:ar,resize:ar},a=n[t]||Kl;a(e,t,i),s[t]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,s,i){return Ra(e,t,s,i)}isAttached(e){const t=e&&Ma(e);return!(!t||!t.isConnected)}}function rr(e){return!Ta()||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?Bl:lr}class cr{constructor(){(0,Bt.A)(this,"x",void 0),(0,Bt.A)(this,"y",void 0),(0,Bt.A)(this,"active",!1),(0,Bt.A)(this,"options",void 0),(0,Bt.A)(this,"$animations",void 0)}tooltipPosition(e){const{x:t,y:s}=this.getProps(["x","y"],e);return{x:t,y:s}}hasValue(){return ki(this.x)&&ki(this.y)}getProps(e,t){const s=this.$animations;if(!t||!s)return this;const i={};return e.forEach(e=>{i[e]=s[e]&&s[e].active()?s[e]._to:this[e]}),i}}function dr(e,t){const s=e.options.ticks,i=hr(e),n=Math.min(s.maxTicksLimit||i,i),a=s.major.enabled?pr(t):[],o=a.length,l=a[0],r=a[o-1],c=[];if(o>n)return gr(t,c,a,o/n),c;const d=ur(a,t,n);if(o>0){let e,s;const i=o>1?Math.round((r-l)/(o-1)):null;for(fr(t,c,d,Es(i)?0:l-i,l),e=0,s=o-1;en)return e}return Math.max(n,1)}function pr(e){const t=[];let s,i;for(s=0,i=e.length;s"left"===e?"right":"right"===e?"left":e,yr=(e,t,s)=>"top"===t||"left"===t?e[t]+s:e[t]-s,xr=(e,t)=>Math.min(t||e,e);function vr(e,t){const s=[],i=e.length/t,n=e.length;let a=0;for(;ao+l)))return c}function _r(e,t){js(e,e=>{const s=e.gc,i=s.length/2;let n;if(i>t){for(n=0;ni?i:s,i=n&&s>i?s:i,{min:Rs(s,Rs(i,s)),max:Rs(i,Rs(s,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){const t=this._labelItems||(this._labelItems=this._computeLabelItems(e));return t}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Ns(this.options.beforeUpdate,[this])}update(e,t,s){const{beginAtZero:i,grace:n,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Qn(this,n,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=o=n||s<=1||!this.isHorizontal())return void(this.labelRotation=i);const c=this._getLabelSizes(),d=c.widest.width,h=c.highest.height,u=$i(this.chart.width-d,0,this.maxWidth);a=e.offset?this.maxWidth/s:u/(s-1),d+6>a&&(a=u/(s-(e.offset?.5:1)),o=this.maxHeight-wr(e.grid)-t.padding-Cr(e.title,this.chart.options.font),l=Math.sqrt(d*d+h*h),r=Si(Math.min(Math.asin($i((c.highest.height+6)/a,-1,1)),Math.asin($i(o/l,-1,1))-Math.asin($i(h/l,-1,1)))),r=Math.max(i,Math.min(n,r))),this.labelRotation=r}afterCalculateLabelRotation(){Ns(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Ns(this.options.beforeFit,[this])}fit(){const e={width:0,height:0},{chart:t,options:{ticks:s,title:i,grid:n}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){const a=Cr(i,t.options.font);if(o?(e.width=this.maxWidth,e.height=wr(n)+a):(e.height=this.maxHeight,e.width=wr(n)+a),s.display&&this.ticks.length){const{first:t,last:i,widest:n,highest:a}=this._getLabelSizes(),l=2*s.padding,r=Ci(this.labelRotation),c=Math.cos(r),d=Math.sin(r);if(o){const t=s.mirror?0:d*n.width+c*a.height;e.height=Math.min(this.maxHeight,e.height+t+l)}else{const t=s.mirror?0:c*n.width+d*a.height;e.width=Math.min(this.maxWidth,e.width+t+l)}this._calculatePadding(t,i,d,c)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,s,i){const{ticks:{align:n,padding:a},position:o}=this.options,l=0!==this.labelRotation,r="top"!==o&&"x"===this.axis;if(this.isHorizontal()){const o=this.getPixelForTick(0)-this.left,c=this.right-this.getPixelForTick(this.ticks.length-1);let d=0,h=0;l?r?(d=i*e.width,h=s*t.height):(d=s*e.height,h=i*t.width):"start"===n?h=t.width:"end"===n?d=e.width:"inner"!==n&&(d=e.width/2,h=t.width/2),this.paddingLeft=Math.max((d-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((h-c+a)*this.width/(this.width-c),0)}else{let s=t.height/2,i=e.height/2;"start"===n?(s=0,i=e.height):"end"===n&&(s=t.height,i=0),this.paddingTop=s+a,this.paddingBottom=i+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Ns(this.options.afterFit,[this])}isHorizontal(){const{axis:e,position:t}=this.options;return"top"===t||"bottom"===t||"x"===e}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){let t,s;for(this.beforeTickToLabelConversion(),this.generateTickLabels(e),t=0,s=e.length;t({width:a[e]||0,height:o[e]||0});return{first:w(0),last:w(t-1),widest:w(k),highest:w(_),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){const t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);const t=this._startPixel+e*this._length;return Li(this._alignToPixels?Sn(this.chart,t,0):t)}getDecimalForPixel(e){const t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){const t=this.ticks||[];if(e>=0&&eo*i?o/s:l/i:l*i0}_computeGridLineItems(e){const t=this.axis,s=this.chart,i=this.options,{grid:n,position:a,border:o}=i,l=n.offset,r=this.isHorizontal(),c=this.ticks,d=c.length+(l?1:0),h=wr(n),u=[],p=o.setContext(this.getContext()),g=p.display?p.width:0,f=g/2,m=function(e){return Sn(s,e,g)};let b,y,x,v,k,_,w,C,S,F,T,M;if("top"===a)b=m(this.bottom),_=this.bottom-h,C=b-f,F=m(e.top)+f,M=e.bottom;else if("bottom"===a)b=m(this.top),F=e.top,M=m(e.bottom)-f,_=b+f,C=this.top+h;else if("left"===a)b=m(this.right),k=this.right-h,w=b-f,S=m(e.left)+f,T=e.right;else if("right"===a)b=m(this.left),S=e.left,T=m(e.right)-f,k=b+f,w=this.left+h;else if("x"===t){if("center"===a)b=m((e.top+e.bottom)/2+.5);else if(Us(a)){const e=Object.keys(a)[0],t=a[e];b=m(this.chart.scales[e].getPixelForValue(t))}F=e.top,M=e.bottom,_=b+f,C=_+h}else if("y"===t){if("center"===a)b=m((e.left+e.right)/2);else if(Us(a)){const e=Object.keys(a)[0],t=a[e];b=m(this.chart.scales[e].getPixelForValue(t))}k=b-f,w=k-h,S=e.left,T=e.right}const P=Ws(i.ticks.maxTicksLimit,d),D=Math.max(1,Math.ceil(d/P));for(y=0;y0&&(a-=i/2);break}h={left:a,top:n,width:i+t.width,height:s+t.height,color:e.backdropColor}}f.push({label:x,font:C,textOffset:T,options:{rotation:g,color:s,strokeColor:l,strokeWidth:c,textAlign:u,textBaseline:M,translation:[v,k],backdrop:h}})}return f}_getXAxisLabelAlignment(){const{position:e,ticks:t}=this.options,s=-Ci(this.labelRotation);if(s)return"top"===e?"left":"right";let i="center";return"start"===t.align?i="left":"end"===t.align?i="right":"inner"===t.align&&(i="inner"),i}_getYAxisLabelAlignment(e){const{position:t,ticks:{crossAlign:s,mirror:i,padding:n}}=this.options,a=this._getLabelSizes(),o=e+n,l=a.widest.width;let r,c;return"left"===t?i?(c=this.right+n,"near"===s?r="left":"center"===s?(r="center",c+=l/2):(r="right",c+=l)):(c=this.right-o,"near"===s?r="right":"center"===s?(r="center",c-=l/2):(r="left",c=this.left)):"right"===t?i?(c=this.left+n,"near"===s?r="right":"center"===s?(r="center",c-=l/2):(r="left",c-=l)):(c=this.left+o,"near"===s?r="left":"center"===s?(r="center",c+=l/2):(r="right",c=this.right)):r="right",{textAlign:r,x:c}}_computeLabelArea(){if(this.options.ticks.mirror)return;const e=this.chart,t=this.options.position;return"left"===t||"right"===t?{top:0,left:this.left,bottom:e.height,right:this.right}:"top"===t||"bottom"===t?{top:this.top,left:0,bottom:this.bottom,right:e.width}:void 0}drawBackground(){const{ctx:e,options:{backgroundColor:t},left:s,top:i,width:n,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(s,i,n,a),e.restore())}getLineWidthForValue(e){const t=this.options.grid;if(!this._isVisible()||!t.display)return 0;const s=this.ticks,i=s.findIndex(t=>t.value===e);if(i>=0){const e=t.setContext(this.getContext(i));return e.lineWidth}return 0}drawGrid(e){const t=this.options.grid,s=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e));let n,a;const o=(e,t,i)=>{i.width&&i.color&&(s.save(),s.lineWidth=i.width,s.strokeStyle=i.color,s.setLineDash(i.borderDash||[]),s.lineDashOffset=i.borderDashOffset,s.beginPath(),s.moveTo(e.x,e.y),s.lineTo(t.x,t.y),s.stroke(),s.restore())};if(t.display)for(n=0,a=i.length;n{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:t,draw:e=>{this.drawLabels(e)}}]:[{z:t,draw:e=>{this.draw(e)}}]}getMatchingVisibleMetas(e){const t=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",i=[];let n,a;for(n=0,a=t.length;n{const i=s.split("."),n=i.pop(),a=[e].concat(i).join("."),o=t[s].split("."),l=o.pop(),r=o.join(".");kn.route(a,n,r,l)})}function Lr(e){return"id"in e&&"defaults"in e}class Vr{constructor(){this.controllers=new Dr(Wo,"datasets",!0),this.elements=new Dr(cr,"elements"),this.plugins=new Dr(Object,"plugins"),this.scales=new Dr(Pr,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each("register",e)}remove(...e){this._each("unregister",e)}addControllers(...e){this._each("register",e,this.controllers)}addElements(...e){this._each("register",e,this.elements)}addPlugins(...e){this._each("register",e,this.plugins)}addScales(...e){this._each("register",e,this.scales)}getController(e){return this._get(e,this.controllers,"controller")}getElement(e){return this._get(e,this.elements,"element")}getPlugin(e){return this._get(e,this.plugins,"plugin")}getScale(e){return this._get(e,this.scales,"scale")}removeControllers(...e){this._each("unregister",e,this.controllers)}removeElements(...e){this._each("unregister",e,this.elements)}removePlugins(...e){this._each("unregister",e,this.plugins)}removeScales(...e){this._each("unregister",e,this.scales)}_each(e,t,s){[...t].forEach(t=>{const i=s||this._getRegistryForType(t);s||i.isForType(t)||i===this.plugins&&t.id?this._exec(e,i,t):js(t,t=>{const i=s||this._getRegistryForType(t);this._exec(e,i,t)})})}_exec(e,t,s){const i=si(e);Ns(s["before"+i],[],s),t[e](s),Ns(s["after"+i],[],s)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(i(t,s),e,"stop"),this._notify(i(s,t),e,"start")}}function Ur(e){const t={},s=[],i=Object.keys(Er.plugins.items);for(let a=0;a1&&jr(e[0].toLowerCase());if(t)return t}throw new Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function Xr(e,t,s){if(s[t+"AxisID"]===e)return{axis:t}}function Kr(e,t){if(t.data&&t.data.datasets){const s=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(s.length)return Xr(e,"x",s[0])||Xr(e,"y",s[0])}return{}}function Qr(e,t){const s=mn[e.type]||{scales:{}},i=t.scales||{},n=Br(e.type,t),a=Object.create(null);return Object.keys(i).forEach(t=>{const o=i[t];if(!Us(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const l=qr(t,o,Kr(t,e),kn.scales[o.type]),r=Nr(l,n),c=s.scales||{};a[t]=Ys(Object.create(null),[{axis:l},o,c[l],c[r]])}),e.data.datasets.forEach(s=>{const n=s.type||e.type,o=s.indexAxis||Br(n,t),l=mn[n]||{},r=l.scales||{};Object.keys(r).forEach(e=>{const t=zr(e,o),n=s[t+"AxisID"]||t;a[n]=a[n]||Object.create(null),Ys(a[n],[{axis:t},i[n],r[e]])})}),Object.keys(a).forEach(e=>{const t=a[e];Ys(t,[kn.scales[t.type],kn.scale])}),a}function Yr(e){const t=e.options||(e.options={});t.plugins=Ws(t.plugins,{}),t.scales=Qr(e,t)}function Gr(e){return e=e||{},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function Jr(e){return e=e||{},e.data=Gr(e.data),Yr(e),e}const Zr=new Map,ec=new Set;function tc(e,t){let s=Zr.get(e);return s||(s=t(),Zr.set(e,s),ec.add(s)),s}const sc=(e,t,s)=>{const i=ti(t,s);void 0!==i&&e.add(i)};class ic{constructor(e){this._config=Jr(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=Gr(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){const e=this._config;this.clearCache(),Yr(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return tc(e,()=>[[`datasets.${e}`,""]])}datasetAnimationScopeKeys(e,t){return tc(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,""]])}datasetElementScopeKeys(e,t){return tc(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,""]])}pluginScopeKeys(e){const t=e.id,s=this.type;return tc(`${s}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){const s=this._scopeCache;let i=s.get(e);return i&&!t||(i=new Map,s.set(e,i)),i}getOptionScopes(e,t,s){const{options:i,type:n}=this,a=this._cachedScopes(e,s),o=a.get(t);if(o)return o;const l=new Set;t.forEach(t=>{e&&(l.add(e),t.forEach(t=>sc(l,e,t))),t.forEach(e=>sc(l,i,e)),t.forEach(e=>sc(l,mn[n]||{},e)),t.forEach(e=>sc(l,kn,e)),t.forEach(e=>sc(l,bn,e))});const r=Array.from(l);return 0===r.length&&r.push(Object.create(null)),ec.has(t)&&a.set(t,r),r}chartOptionScopes(){const{options:e,type:t}=this;return[e,mn[t]||{},kn.datasets[t]||{},{type:t},kn,bn]}resolveNamedOptions(e,t,s,i=[""]){const n={$shared:!0},{resolver:a,subPrefixes:o}=nc(this._resolverCache,e,i);let l=a;if(oc(a,t)){n.$shared=!1,s=ni(s)?s():s;const t=this.createResolver(e,s,o);l=Jn(a,s,t)}for(const r of t)n[r]=l[r];return n}createResolver(e,t,s=[""],i){const{resolver:n}=nc(this._resolverCache,e,s);return Us(t)?Jn(n,t,void 0,i):n}}function nc(e,t,s){let i=e.get(t);i||(i=new Map,e.set(t,i));const n=s.join();let a=i.get(n);if(!a){const e=Gn(t,s);a={resolver:e,subPrefixes:s.filter(e=>!e.toLowerCase().includes("hover"))},i.set(n,a)}return a}const ac=e=>Us(e)&&Object.getOwnPropertyNames(e).some(t=>ni(e[t]));function oc(e,t){const{isScriptable:s,isIndexable:i}=Zn(e);for(const n of t){const t=s(n),a=i(n),o=(a||t)&&e[n];if(t&&(ni(o)||ac(o))||a&&Is(o))return!0}return!1}var lc="4.5.1";const rc=["top","bottom","left","right","chartArea"];function cc(e,t){return"top"===e||"bottom"===e||-1===rc.indexOf(e)&&"x"===t}function dc(e,t){return function(s,i){return s[e]===i[e]?s[t]-i[t]:s[e]-i[e]}}function hc(e){const t=e.chart,s=t.options.animation;t.notifyPlugins("afterRender"),Ns(s&&s.onComplete,[e],t)}function uc(e){const t=e.chart,s=t.options.animation;Ns(s&&s.onProgress,[e],t)}function pc(e){return Ta()&&"string"===typeof e?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}const gc={},fc=e=>{const t=pc(e);return Object.values(gc).filter(e=>e.canvas===t).pop()};function mc(e,t,s){const i=Object.keys(e);for(const n of i){const i=+n;if(i>=t){const a=e[n];delete e[n],(s>0||i>t)&&(e[i+s]=a)}}}function bc(e,t,s,i){return s&&"mouseout"!==e.type?i?t:e:null}class yc{static register(...e){Er.add(...e),xc()}static unregister(...e){Er.remove(...e),xc()}constructor(e,t){const s=this.config=new ic(t),i=pc(e),n=fc(i);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||rr(i)),this.platform.updateConfig(s);const o=this.platform.acquireContext(i,a.aspectRatio),l=o&&o.canvas,r=l&&l.height,c=l&&l.width;this.id=Vs(),this.ctx=o,this.canvas=l,this.width=c,this.height=r,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ir,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Hi(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],gc[this.id]=this,o&&l?(go.listen(this,"complete",hc),go.listen(this,"progress",uc),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:e,maintainAspectRatio:t},width:s,height:i,_aspectRatio:n}=this;return Es(e)?t&&n?n:i?s/i:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Er}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Wa(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Fn(this.canvas,this.ctx),this}stop(){return go.stop(this),this}resize(e,t){go.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){const s=this.options,i=this.canvas,n=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(i,e,t,n),o=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Wa(this,o,!0)&&(this.notifyPlugins("resize",{size:a}),Ns(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options,t=e.scales||{};js(t,(e,t)=>{e.id=t})}buildOrUpdateScales(){const e=this.options,t=e.scales,s=this.scales,i=Object.keys(s).reduce((e,t)=>(e[t]=!1,e),{});let n=[];t&&(n=n.concat(Object.keys(t).map(e=>{const s=t[e],i=qr(e,s),n="r"===i,a="x"===i;return{options:s,dposition:n?"chartArea":a?"bottom":"left",dtype:n?"radialLinear":a?"category":"linear"}}))),js(n,t=>{const n=t.options,a=n.id,o=qr(a,n),l=Ws(n.type,t.dtype);void 0!==n.position&&cc(n.position,o)===cc(t.dposition)||(n.position=t.dposition),i[a]=!0;let r=null;if(a in s&&s[a].type===l)r=s[a];else{const e=Er.getScale(l);r=new e({id:a,type:l,ctx:this.ctx,chart:this}),s[r.id]=r}r.init(n,e)}),js(i,(e,t)=>{e||delete s[t]}),js(s,e=>{Rl.configure(this,e,e.options),Rl.addBox(this,e)})}_updateMetasets(){const e=this._metasets,t=this.data.datasets.length,s=e.length;if(e.sort((e,t)=>e.index-t.index),s>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,s)=>{0===t.filter(t=>t===e._dataset).length&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const e=[],t=this.data.datasets;let s,i;for(this._removeUnreferencedMetasets(),s=0,i=t.length;s{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){const t=this.config;t.update();const s=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let r=0,c=this.data.datasets.length;r{e.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(dc("z","_idx"));const{_active:o,_lastEvent:l}=this;l?this._eventHandler(l,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){js(this.scales,e=>{Rl.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const e=this.options,t=new Set(Object.keys(this._listeners)),s=new Set(e.events);ai(t,s)&&!!this._responsiveListeners===e.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(const{method:s,start:i,count:n}of t){const t="_removeElements"===s?-n:n;mc(e,i,t)}}_getUniformDataChanges(){const e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];const t=this.data.datasets.length,s=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+","+e.splice(1).join(","))),i=s(0);for(let n=1;ne.split(",")).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;Rl.update(this,this.width,this.height,e);const t=this.chartArea,s=t.width<=0||t.height<=0;this._layers=[],js(this.boxes,e=>{s&&"chartArea"===e.position||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){const t=this.ctx,s={meta:e,index:e.index,cancelable:!0},i=uo(this,e);!1!==this.notifyPlugins("beforeDatasetDraw",s)&&(i&&Dn(t,i),e.controller.draw(),i&&An(t),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(e){return Pn(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,s,i){const n=_l.modes[t];return"function"===typeof n?n(this,e,s,i):[]}getDatasetMeta(e){const t=this.data.datasets[e],s=this._metasets;let i=s.filter(e=>e&&e._dataset===t).pop();return i||(i={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},s.push(i)),i}getContext(){return this.$context||(this.$context=Yn(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){const t=this.data.datasets[e];if(!t)return!1;const s=this.getDatasetMeta(e);return"boolean"===typeof s.hidden?!s.hidden:!t.hidden}setDatasetVisibility(e,t){const s=this.getDatasetMeta(e);s.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,s){const i=s?"show":"hide",n=this.getDatasetMeta(e),a=n.controller._resolveAnimations(void 0,i);ii(t)?(n.data[t].hidden=!s,this.update()):(this.setDatasetVisibility(e,s),a.update(n,{visible:s}),this.update(t=>t.datasetIndex===e?i:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){const t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),go.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,s,i),e[s]=i},i=(e,t,s)=>{e.offsetX=t,e.offsetY=s,this._eventHandler(e)};js(this.options.events,e=>s(e,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const e=this._responsiveListeners,t=this.platform,s=(s,i)=>{t.addEventListener(this,s,i),e[s]=i},i=(s,i)=>{e[s]&&(t.removeEventListener(this,s,i),delete e[s])},n=(e,t)=>{this.canvas&&this.resize(e,t)};let a;const o=()=>{i("attach",o),this.attached=!0,this.resize(),s("resize",n),s("detach",a)};a=()=>{this.attached=!1,i("resize",n),this._stop(),this._resize(0,0),s("attach",o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){js(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},js(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,s){const i=s?"set":"remove";let n,a,o,l;for("dataset"===t&&(n=this.getDatasetMeta(e[0].datasetIndex),n.controller["_"+i+"DatasetHoverStyle"]()),o=0,l=e.length;o{const s=this.getDatasetMeta(e);if(!s)throw new Error("No dataset found at index "+e);return{datasetIndex:e,element:s.data[t],index:t}}),i=!Hs(s,t);i&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,t))}notifyPlugins(e,t,s){return this._plugins.notify(this,e,t,s)}isPluginEnabled(e){return 1===this._plugins._cache.filter(t=>t.plugin.id===e).length}_updateHoverStyles(e,t,s){const i=this.options.hover,n=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=n(t,e),o=s?e:n(e,t);a.length&&this.updateHoverStyle(a,i.mode,!1),o.length&&i.mode&&this.updateHoverStyle(o,i.mode,!0)}_eventHandler(e,t){const s={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},i=t=>(t.options.events||this.options.events).includes(e.native.type);if(!1===this.notifyPlugins("beforeEvent",s,i))return;const n=this._handleEvent(e,t,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,i),(n||s.changed)&&this.render(),this}_handleEvent(e,t,s){const{_active:i=[],options:n}=this,a=t,o=this._getActiveElements(e,i,s,a),l=oi(e),r=bc(e,this._lastEvent,s,l);s&&(this._lastEvent=null,Ns(n.onHover,[e,o,this],this),l&&Ns(n.onClick,[e,o,this],this));const c=!Hs(o,i);return(c||t)&&(this._active=o,this._updateHoverStyles(o,i,t)),this._lastEvent=r,c}_getActiveElements(e,t,s,i){if("mouseout"===e.type)return[];if(!s)return t;const n=this.options.hover;return this.getElementsAtEventForMode(e,n.mode,n,i)}}function xc(){return js(yc.instances,e=>e._plugins.invalidate())}function vc(e,t,s){const{startAngle:i,x:n,y:a,outerRadius:o,innerRadius:l,options:r}=t,{borderWidth:c,borderJoinStyle:d}=r,h=Math.min(c/o,Di(i-s));if(e.beginPath(),e.arc(n,a,o-c/2,i+h/2,s-h/2),l>0){const t=Math.min(c/l,Di(i-s));e.arc(n,a,l+c/2,s-t/2,i+t/2,!0)}else{const t=Math.min(c/2,o*Di(i-s));if("round"===d)e.arc(n,a,t,s-li/2,i+li/2,!0);else if("bevel"===d){const o=2*t*t,l=-o*Math.cos(s+li/2)+n,r=-o*Math.sin(s+li/2)+a,c=o*Math.cos(i+li/2)+n,d=o*Math.sin(i+li/2)+a;e.lineTo(l,r),e.lineTo(c,d)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip("evenodd")}function kc(e,t,s){const{startAngle:i,pixelMargin:n,x:a,y:o,outerRadius:l,innerRadius:r}=t;let c=n/l;e.beginPath(),e.arc(a,o,l,i-c,s+c),r>n?(c=n/r,e.arc(a,o,r,s+c,i-c,!0)):e.arc(a,o,n,s+ui,i-ui),e.closePath(),e.clip()}function _c(e){return Nn(e,["outerStart","outerEnd","innerStart","innerEnd"])}function wc(e,t,s,i){const n=_c(e.options.borderRadius),a=(s-t)/2,o=Math.min(a,i*t/2),l=e=>{const t=(s-Math.min(a,e))*i/2;return $i(e,0,Math.min(a,t))};return{outerStart:l(n.outerStart),outerEnd:l(n.outerEnd),innerStart:$i(n.innerStart,0,o),innerEnd:$i(n.innerEnd,0,o)}}function Cc(e,t,s,i){return{x:s+e*Math.cos(t),y:i+e*Math.sin(t)}}function Sc(e,t,s,i,n,a){const{x:o,y:l,startAngle:r,pixelMargin:c,innerRadius:d}=t,h=Math.max(t.outerRadius+i+s-c,0),u=d>0?d+i+s+c:0;let p=0;const g=n-r;if(i){const e=d>0?d-i:0,t=h>0?h-i:0,s=(e+t)/2,n=0!==s?g*s/(s+i):g;p=(g-n)/2}const f=Math.max(.001,g*h-s/li)/h,m=(g-f)/2,b=r+m+p,y=n-m-p,{outerStart:x,outerEnd:v,innerStart:k,innerEnd:_}=wc(t,u,h,y-b),w=h-x,C=h-v,S=b+x/w,F=y-v/C,T=u+k,M=u+_,P=b+k/T,D=y-_/M;if(e.beginPath(),a){const t=(S+F)/2;if(e.arc(o,l,h,S,t),e.arc(o,l,h,t,F),v>0){const t=Cc(C,F,o,l);e.arc(t.x,t.y,v,F,y+ui)}const s=Cc(M,y,o,l);if(e.lineTo(s.x,s.y),_>0){const t=Cc(M,D,o,l);e.arc(t.x,t.y,_,y+ui,D+Math.PI)}const i=(y-_/u+(b+k/u))/2;if(e.arc(o,l,u,y-_/u,i,!0),e.arc(o,l,u,i,b+k/u,!0),k>0){const t=Cc(T,P,o,l);e.arc(t.x,t.y,k,P+Math.PI,b-ui)}const n=Cc(w,b,o,l);if(e.lineTo(n.x,n.y),x>0){const t=Cc(w,S,o,l);e.arc(t.x,t.y,x,b-ui,S)}}else{e.moveTo(o,l);const t=Math.cos(S)*h+o,s=Math.sin(S)*h+l;e.lineTo(t,s);const i=Math.cos(F)*h+o,n=Math.sin(F)*h+l;e.lineTo(i,n)}e.closePath()}function Fc(e,t,s,i,n){const{fullCircles:a,startAngle:o,circumference:l}=t;let r=t.endAngle;if(a){Sc(e,t,s,i,r,n);for(let t=0;t=li&&0===p&&"miter"!==d&&vc(e,t,f),a||(Sc(e,t,s,i,f,n),e.stroke())}(0,Bt.A)(yc,"defaults",kn),(0,Bt.A)(yc,"instances",gc),(0,Bt.A)(yc,"overrides",mn),(0,Bt.A)(yc,"registry",Er),(0,Bt.A)(yc,"version",lc),(0,Bt.A)(yc,"getChart",fc);class Mc extends cr{constructor(e){super(),(0,Bt.A)(this,"circumference",void 0),(0,Bt.A)(this,"endAngle",void 0),(0,Bt.A)(this,"fullCircles",void 0),(0,Bt.A)(this,"innerRadius",void 0),(0,Bt.A)(this,"outerRadius",void 0),(0,Bt.A)(this,"pixelMargin",void 0),(0,Bt.A)(this,"startAngle",void 0),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,s){const i=this.getProps(["x","y"],s),{angle:n,distance:a}=Ti(i,{x:e,y:t}),{startAngle:o,endAngle:l,innerRadius:r,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],s),h=(this.options.spacing+this.options.borderWidth)/2,u=Ws(d,l-o),p=Ai(n,o,l)&&o!==l,g=u>=ri||p,f=Vi(a,r+h,c+h);return g&&f}getCenterPoint(e){const{x:t,y:s,startAngle:i,endAngle:n,innerRadius:a,outerRadius:o}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:l,spacing:r}=this.options,c=(i+n)/2,d=(a+o+r+l)/2;return{x:t+Math.cos(c)*d,y:s+Math.sin(c)*d}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:t,circumference:s}=this,i=(t.offset||0)/4,n=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin="inner"===t.borderAlign?.33:0,this.fullCircles=s>ri?Math.floor(s/ri):0,0===s||this.innerRadius<0||this.outerRadius<0)return;e.save();const o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*i,Math.sin(o)*i);const l=1-Math.sin(Math.min(li,s||0)),r=i*l;e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Fc(e,this,r,n,a),Tc(e,this,r,n,a),e.restore()}}function Pc(e,t,s=t){e.lineCap=Ws(s.borderCapStyle,t.borderCapStyle),e.setLineDash(Ws(s.borderDash,t.borderDash)),e.lineDashOffset=Ws(s.borderDashOffset,t.borderDashOffset),e.lineJoin=Ws(s.borderJoinStyle,t.borderJoinStyle),e.lineWidth=Ws(s.borderWidth,t.borderWidth),e.strokeStyle=Ws(s.borderColor,t.borderColor)}function Dc(e,t,s){e.lineTo(s.x,s.y)}function Ac(e){return e.stepped?$n:e.tension||"monotone"===e.cubicInterpolationMode?Ln:Dc}function $c(e,t,s={}){const i=e.length,{start:n=0,end:a=i-1}=s,{start:o,end:l}=t,r=Math.max(n,o),c=Math.min(a,l),d=nl&&a>l;return{count:i,start:r,loop:t.loop,ilen:c(o+(c?l-e:e))%a,x=()=>{p!==g&&(e.lineTo(m,g),e.lineTo(m,p),e.lineTo(m,f))};for(r&&(h=n[y(0)],e.moveTo(h.x,h.y)),d=0;d<=l;++d){if(h=n[y(d)],h.skip)continue;const t=h.x,s=h.y,i=0|t;i===u?(sg&&(g=s),m=(b*m+t)/++b):(x(),e.lineTo(t,s),u=i,b=0,p=g=s),f=s}x()}function Ec(e){const t=e.options,s=t.borderDash&&t.borderDash.length,i=!e._decimated&&!e._loop&&!t.tension&&"monotone"!==t.cubicInterpolationMode&&!t.stepped&&!s;return i?Vc:Lc}function Ic(e){return e.stepped?ja:e.tension||"monotone"===e.cubicInterpolationMode?Ha:Na}function Uc(e,t,s,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,s,i)&&n.closePath()),Pc(e,t.options),e.stroke(n)}function Oc(e,t,s,i){const{segments:n,options:a}=t,o=Ec(t);for(const l of n)Pc(e,a,l.style),e.beginPath(),o(e,t,l,{start:s,end:s+i-1})&&e.closePath(),e.stroke()}(0,Bt.A)(Mc,"id","arc"),(0,Bt.A)(Mc,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),(0,Bt.A)(Mc,"defaultRoutes",{backgroundColor:"backgroundColor"}),(0,Bt.A)(Mc,"descriptors",{_scriptable:!0,_indexable:e=>"borderDash"!==e});const Rc="function"===typeof Path2D;function Wc(e,t,s,i){Rc&&!t.options.segment?Uc(e,t,s,i):Oc(e,t,s,i)}class Bc extends cr{constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){const s=this.options;if((s.tension||"monotone"===s.cubicInterpolationMode)&&!s.stepped&&!this._pointsUpdated){const i=s.spanGaps?this._loop:this._fullLoop;Fa(this._points,s,e,i,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=no(this,this.options.segment))}first(){const e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){const e=this.segments,t=this.points,s=e.length;return s&&t[e[s-1].end]}interpolate(e,t){const s=this.options,i=e[t],n=this.points,a=to(this,{property:t,start:i,end:i});if(!a.length)return;const o=[],l=Ic(s);let r,c;for(r=0,c=a.length;r"borderDash"!==e&&"fill"!==e});class Nc extends cr{constructor(e){super(),(0,Bt.A)(this,"parsed",void 0),(0,Bt.A)(this,"skip",void 0),(0,Bt.A)(this,"stop",void 0),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,t,s){const i=this.options,{x:n,y:a}=this.getProps(["x","y"],s);return Math.pow(e-n,2)+Math.pow(t-a,2){t=id(e,t,n);const o=n[e],l=n[t];null!==i?(a.push({x:o.x,y:i}),a.push({x:l.x,y:i})):null!==s&&(a.push({x:s,y:o.y}),a.push({x:s,y:l.y}))}),a}function id(e,t,s){for(;t>e;t--){const e=s[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function nd(e,t,s,i){return e&&t?i(e[s],t[s]):e?e[s]:t?t[s]:0}function ad(e,t){let s=[],i=!1;return Is(e)?(i=!0,s=e):s=sd(e,t),s.length?new Bc({points:s,options:{tension:0},_loop:i,_fullLoop:i}):null}function od(e){return e&&!1!==e.fill}function ld(e,t,s){const i=e[t];let n=i.fill;const a=[t];let o;if(!s)return n;while(!1!==n&&-1===a.indexOf(n)){if(!Os(n))return n;if(o=e[n],!o)return!1;if(o.visible)return n;a.push(n),n=o.fill}return!1}function rd(e,t,s){const i=ud(e);if(Us(i))return!isNaN(i.value)&&i;let n=parseFloat(i);return Os(n)&&Math.floor(n)===n?cd(i[0],t,n,s):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function cd(e,t,s,i){return"-"!==e&&"+"!==e||(s=t+s),!(s===t||s<0||s>=i)&&s}function dd(e,t){let s=null;return"start"===e?s=t.bottom:"end"===e?s=t.top:Us(e)?s=t.getPixelForValue(e.value):t.getBasePixel&&(s=t.getBasePixel()),s}function hd(e,t,s){let i;return i="start"===e?s:"end"===e?t.options.reverse?t.min:t.max:Us(e)?e.value:t.getBaseValue(),i}function ud(e){const t=e.options,s=t.fill;let i=Ws(s&&s.target,s);return void 0===i&&(i=!!t.backgroundColor),!1!==i&&null!==i&&(!0===i?"origin":i)}function pd(e){const{scale:t,index:s,line:i}=e,n=[],a=i.segments,o=i.points,l=gd(t,s);l.push(ad({x:null,y:t.bottom},i));for(let r=0;r=0;--o){const t=n[o].$filler;t&&(t.line.updateControlPoints(a,t.axis),i&&t.fill&&wd(e.ctx,t,a))}},beforeDatasetsDraw(e,t,s){if("beforeDatasetsDraw"!==s.drawTime)return;const i=e.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){const t=i[n].$filler;od(t)&&wd(e.ctx,t,e.chartArea)}},beforeDatasetDraw(e,t,s){const i=t.meta.$filler;od(i)&&"beforeDatasetDraw"===s.drawTime&&wd(e.ctx,i,e.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Ad=(e,t)=>{let{boxHeight:s=t,boxWidth:i=t}=e;return e.usePointStyle&&(s=Math.min(s,t),i=e.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:s,itemHeight:Math.max(t,s)}},$d=(e,t)=>null!==e&&null!==t&&e.datasetIndex===t.datasetIndex&&e.index===t.index;class Ld extends cr{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,s){this.maxWidth=e,this.maxHeight=t,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const e=this.options.labels||{};let t=Ns(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,s)=>e.sort(t,s,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){const{options:e,ctx:t}=this;if(!e.display)return void(this.width=this.height=0);const s=e.labels,i=Xn(s.font),n=i.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:l}=Ad(s,n);let r,c;t.font=i.string,this.isHorizontal()?(r=this.maxWidth,c=this._fitRows(a,n,o,l)+10):(c=this.maxHeight,r=this._fitCols(a,i,o,l)+10),this.width=Math.min(r,e.maxWidth||this.maxWidth),this.height=Math.min(c,e.maxHeight||this.maxHeight)}_fitRows(e,t,s,i){const{ctx:n,maxWidth:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.lineWidths=[0],c=i+o;let d=e;n.textAlign="left",n.textBaseline="middle";let h=-1,u=-c;return this.legendItems.forEach((e,p)=>{const g=s+t/2+n.measureText(e.text).width;(0===p||r[r.length-1]+g+2*o>a)&&(d+=c,r[r.length-(p>0?0:1)]=0,u+=c,h++),l[p]={left:0,top:u,row:h,width:g,height:i},r[r.length-1]+=g+o}),d}_fitCols(e,t,s,i){const{ctx:n,maxHeight:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.columnSizes=[],c=a-e;let d=o,h=0,u=0,p=0,g=0;return this.legendItems.forEach((e,a)=>{const{itemWidth:f,itemHeight:m}=Vd(s,t,n,e,i);a>0&&u+m+2*o>c&&(d+=h+o,r.push({width:h,height:u}),p+=h+o,g++,h=u=0),l[a]={left:p,top:u,col:g,width:f,height:m},h=Math.max(h,f),u+=m+o}),d+=h,r.push({width:h,height:u}),d}adjustHitBoxes(){if(!this.options.display)return;const e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:s,labels:{padding:i},rtl:n}}=this,a=Ka(n,this.left,this.width);if(this.isHorizontal()){let n=0,o=Xi(s,this.left+i,this.right-this.lineWidths[n]);for(const l of t)n!==l.row&&(n=l.row,o=Xi(s,this.left+i,this.right-this.lineWidths[n])),l.top+=this.top+e+i,l.left=a.leftForLtr(a.x(o),l.width),o+=l.width+i}else{let n=0,o=Xi(s,this.top+e+i,this.bottom-this.columnSizes[n].height);for(const l of t)l.col!==n&&(n=l.col,o=Xi(s,this.top+e+i,this.bottom-this.columnSizes[n].height)),l.top=o,l.left+=this.left+i,l.left=a.leftForLtr(a.x(l.left),l.width),o+=l.height+i}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const e=this.ctx;Dn(e,this),this._draw(),An(e)}}_draw(){const{options:e,columnSizes:t,lineWidths:s,ctx:i}=this,{align:n,labels:a}=e,o=kn.color,l=Ka(e.rtl,this.left,this.width),r=Xn(a.font),{padding:c}=a,d=r.size,h=d/2;let u;this.drawTitle(),i.textAlign=l.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=r.string;const{boxWidth:p,boxHeight:g,itemHeight:f}=Ad(a,d),m=function(e,t,s){if(isNaN(p)||p<=0||isNaN(g)||g<0)return;i.save();const n=Ws(s.lineWidth,1);if(i.fillStyle=Ws(s.fillStyle,o),i.lineCap=Ws(s.lineCap,"butt"),i.lineDashOffset=Ws(s.lineDashOffset,0),i.lineJoin=Ws(s.lineJoin,"miter"),i.lineWidth=n,i.strokeStyle=Ws(s.strokeStyle,o),i.setLineDash(Ws(s.lineDash,[])),a.usePointStyle){const o={radius:g*Math.SQRT2/2,pointStyle:s.pointStyle,rotation:s.rotation,borderWidth:n},r=l.xPlus(e,p/2),c=t+h;Mn(i,o,r,c,a.pointStyleWidth&&p)}else{const a=t+Math.max((d-g)/2,0),o=l.leftForLtr(e,p),r=Hn(s.borderRadius);i.beginPath(),Object.values(r).some(e=>0!==e)?On(i,{x:o,y:a,w:p,h:g,radius:r}):i.rect(o,a,p,g),i.fill(),0!==n&&i.stroke()}i.restore()},b=function(e,t,s){Un(i,s.text,e,t+f/2,r,{strikethrough:s.hidden,textAlign:l.textAlign(s.textAlign)})},y=this.isHorizontal(),x=this._computeTitleHeight();u=y?{x:Xi(n,this.left+c,this.right-s[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:Xi(n,this.top+x+c,this.bottom-t[0].height),line:0},Qa(this.ctx,e.textDirection);const v=f+c;this.legendItems.forEach((o,d)=>{i.strokeStyle=o.fontColor,i.fillStyle=o.fontColor;const g=i.measureText(o.text).width,f=l.textAlign(o.textAlign||(o.textAlign=a.textAlign)),k=p+h+g;let _=u.x,w=u.y;l.setWidth(this.width),y?d>0&&_+k+c>this.right&&(w=u.y+=v,u.line++,_=u.x=Xi(n,this.left+c,this.right-s[u.line])):d>0&&w+v>this.bottom&&(_=u.x=_+t[u.line].width+c,u.line++,w=u.y=Xi(n,this.top+x+c,this.bottom-t[u.line].height));const C=l.x(_);if(m(C,w,o),_=Ki(f,_+p+h,y?_+k:this.right,e.rtl),b(l.x(_),w,o),y)u.x+=k+c;else if("string"!==typeof o.text){const e=r.lineHeight;u.y+=Ud(o,e)+c}else u.y+=v}),Ya(this.ctx,e.textDirection)}drawTitle(){const e=this.options,t=e.title,s=Xn(t.font),i=qn(t.padding);if(!t.display)return;const n=Ka(e.rtl,this.left,this.width),a=this.ctx,o=t.position,l=s.size/2,r=i.top+l;let c,d=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),c=this.top+r,d=Xi(e.align,d,this.right-h);else{const t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);c=r+Xi(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}const u=Xi(o,d,d+h);a.textAlign=n.textAlign(qi(o)),a.textBaseline="middle",a.strokeStyle=t.color,a.fillStyle=t.color,a.font=s.string,Un(a,t.text,u,c,s)}_computeTitleHeight(){const e=this.options.title,t=Xn(e.font),s=qn(e.padding);return e.display?t.lineHeight+s.height:0}_getLegendItemAt(e,t){let s,i,n;if(Vi(e,this.left,this.right)&&Vi(t,this.top,this.bottom))for(n=this.legendHitBoxes,s=0;se.length>t.length?e:t)),t+s.size/2+i.measureText(n).width}function Id(e,t,s){let i=e;return"string"!==typeof t.text&&(i=Ud(t,s)),i}function Ud(e,t){const s=e.text?e.text.length:0;return t*s}function Od(e,t){return!("mousemove"!==e&&"mouseout"!==e||!t.onHover&&!t.onLeave)||!(!t.onClick||"click"!==e&&"mouseup"!==e)}var Rd={id:"legend",_element:Ld,start(e,t,s){const i=e.legend=new Ld({ctx:e.ctx,options:s,chart:e});Rl.configure(e,i,s),Rl.addBox(e,i)},stop(e){Rl.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,s){const i=e.legend;Rl.configure(e,i,s),i.options=s},afterUpdate(e){const t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,s){const i=t.datasetIndex,n=s.chart;n.isDatasetVisible(i)?(n.hide(i),t.hidden=!0):(n.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){const t=e.data.datasets,{labels:{usePointStyle:s,pointStyle:i,textAlign:n,color:a,useBorderRadius:o,borderRadius:l}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{const r=e.controller.getStyle(s?0:void 0),c=qn(r.borderWidth);return{text:t[e.index].label,fillStyle:r.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:(c.width+c.height)/4,strokeStyle:r.borderColor,pointStyle:i||r.pointStyle,rotation:r.rotation,textAlign:n||r.textAlign,borderRadius:o&&(l||r.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:e=>!e.startsWith("on"),labels:{_scriptable:e=>!["generateLabels","filter","sort"].includes(e)}}};new WeakMap;const Wd={average(e){if(!e.length)return!1;let t,s,i=new Set,n=0,a=0;for(t=0,s=e.length;te+t)/i.size;return{x:o,y:n/a}},nearest(e,t){if(!e.length)return!1;let s,i,n,a=t.x,o=t.y,l=Number.POSITIVE_INFINITY;for(s=0,i=e.length;s-1?e.split("\n"):e}function Nd(e,t){const{element:s,datasetIndex:i,index:n}=t,a=e.getDatasetMeta(i).controller,{label:o,value:l}=a.getLabelAndValue(n);return{chart:e,label:o,parsed:a.getParsed(n),raw:e.data.datasets[i].data[n],formattedValue:l,dataset:a.getDataset(),dataIndex:n,datasetIndex:i,element:s}}function jd(e,t){const s=e.chart.ctx,{body:i,footer:n,title:a}=e,{boxWidth:o,boxHeight:l}=t,r=Xn(t.bodyFont),c=Xn(t.titleFont),d=Xn(t.footerFont),h=a.length,u=n.length,p=i.length,g=qn(t.padding);let f=g.height,m=0,b=i.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(b+=e.beforeBody.length+e.afterBody.length,h&&(f+=h*c.lineHeight+(h-1)*t.titleSpacing+t.titleMarginBottom),b){const e=t.displayColors?Math.max(l,r.lineHeight):r.lineHeight;f+=p*e+(b-p)*r.lineHeight+(b-1)*t.bodySpacing}u&&(f+=t.footerMarginTop+u*d.lineHeight+(u-1)*t.footerSpacing);let y=0;const x=function(e){m=Math.max(m,s.measureText(e).width+y)};return s.save(),s.font=c.string,js(e.title,x),s.font=r.string,js(e.beforeBody.concat(e.afterBody),x),y=t.displayColors?o+2+t.boxPadding:0,js(i,e=>{js(e.before,x),js(e.lines,x),js(e.after,x)}),y=0,s.font=d.string,js(e.footer,x),s.restore(),m+=g.width,{width:m,height:f}}function Hd(e,t){const{y:s,height:i}=t;return se.height-i/2?"bottom":"center"}function qd(e,t,s,i){const{x:n,width:a}=i,o=s.caretSize+s.caretPadding;return"left"===e&&n+a+o>t.width||("right"===e&&n-a-o<0||void 0)}function Xd(e,t,s,i){const{x:n,width:a}=s,{width:o,chartArea:{left:l,right:r}}=e;let c="center";return"center"===i?c=n<=(l+r)/2?"left":"right":n<=a/2?c="left":n>=o-a/2&&(c="right"),qd(c,e,t,s)&&(c="center"),c}function Kd(e,t,s){const i=s.yAlign||t.yAlign||Hd(e,s);return{xAlign:s.xAlign||t.xAlign||Xd(e,t,s,i),yAlign:i}}function Qd(e,t){let{x:s,width:i}=e;return"right"===t?s-=i:"center"===t&&(s-=i/2),s}function Yd(e,t,s){let{y:i,height:n}=e;return"top"===t?i+=s:i-="bottom"===t?n+s:n/2,i}function Gd(e,t,s,i){const{caretSize:n,caretPadding:a,cornerRadius:o}=e,{xAlign:l,yAlign:r}=s,c=n+a,{topLeft:d,topRight:h,bottomLeft:u,bottomRight:p}=Hn(o);let g=Qd(t,l);const f=Yd(t,r,c);return"center"===r?"left"===l?g+=c:"right"===l&&(g-=c):"left"===l?g-=Math.max(d,u)+n:"right"===l&&(g+=Math.max(h,p)+n),{x:$i(g,0,i.width-t.width),y:$i(f,0,i.height-t.height)}}function Jd(e,t,s){const i=qn(s.padding);return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-i.right:e.x+i.left}function Zd(e){return Bd([],zd(e))}function eh(e,t,s){return Yn(e,{tooltip:t,tooltipItems:s,type:"tooltip"})}function th(e,t){const s=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return s?e.override(s):e}const sh={beforeTitle:Ls,title(e){if(e.length>0){const t=e[0],s=t.chart.data.labels,i=s?s.length:0;if(this&&this.options&&"dataset"===this.options.mode)return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex{const t={before:[],lines:[],after:[]},n=th(s,e);Bd(t.before,zd(ih(n,"beforeLabel",this,e))),Bd(t.lines,ih(n,"label",this,e)),Bd(t.after,zd(ih(n,"afterLabel",this,e))),i.push(t)}),i}getAfterBody(e,t){return Zd(ih(t.callbacks,"afterBody",this,e))}getFooter(e,t){const{callbacks:s}=t,i=ih(s,"beforeFooter",this,e),n=ih(s,"footer",this,e),a=ih(s,"afterFooter",this,e);let o=[];return o=Bd(o,zd(i)),o=Bd(o,zd(n)),o=Bd(o,zd(a)),o}_createItems(e){const t=this._active,s=this.chart.data,i=[],n=[],a=[];let o,l,r=[];for(o=0,l=t.length;oe.filter(t,i,n,s))),e.itemSort&&(r=r.sort((t,i)=>e.itemSort(t,i,s))),js(r,t=>{const s=th(e.callbacks,t);i.push(ih(s,"labelColor",this,t)),n.push(ih(s,"labelPointStyle",this,t)),a.push(ih(s,"labelTextColor",this,t))}),this.labelColors=i,this.labelPointStyles=n,this.labelTextColors=a,this.dataPoints=r,r}update(e,t){const s=this.options.setContext(this.getContext()),i=this._active;let n,a=[];if(i.length){const e=Wd[s.position].call(this,i,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const t=this._size=jd(this,s),o=Object.assign({},e,t),l=Kd(this.chart,s,o),r=Gd(s,o,l,this.chart);this.xAlign=l.xAlign,this.yAlign=l.yAlign,n={opacity:1,x:r.x,y:r.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=a,this.$context=void 0,n&&this._resolveAnimations().update(this,n),e&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,s,i){const n=this.getCaretPosition(e,s,i);t.lineTo(n.x1,n.y1),t.lineTo(n.x2,n.y2),t.lineTo(n.x3,n.y3)}getCaretPosition(e,t,s){const{xAlign:i,yAlign:n}=this,{caretSize:a,cornerRadius:o}=s,{topLeft:l,topRight:r,bottomLeft:c,bottomRight:d}=Hn(o),{x:h,y:u}=e,{width:p,height:g}=t;let f,m,b,y,x,v;return"center"===n?(x=u+g/2,"left"===i?(f=h,m=f-a,y=x+a,v=x-a):(f=h+p,m=f+a,y=x-a,v=x+a),b=f):(m="left"===i?h+Math.max(l,c)+a:"right"===i?h+p-Math.max(r,d)-a:this.caretX,"top"===n?(y=u,x=y-a,f=m-a,b=m+a):(y=u+g,x=y+a,f=m+a,b=m-a),v=y),{x1:f,x2:m,x3:b,y1:y,y2:x,y3:v}}drawTitle(e,t,s){const i=this.title,n=i.length;let a,o,l;if(n){const r=Ka(s.rtl,this.x,this.width);for(e.x=Jd(this,s.titleAlign,s),t.textAlign=r.textAlign(s.titleAlign),t.textBaseline="middle",a=Xn(s.titleFont),o=s.titleSpacing,t.fillStyle=s.titleColor,t.font=a.string,l=0;l0!==e)?(e.beginPath(),e.fillStyle=n.multiKeyBackground,On(e,{x:t,y:p,w:r,h:l,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),On(e,{x:s,y:p+1,w:r-2,h:l-2,radius:o}),e.fill()):(e.fillStyle=n.multiKeyBackground,e.fillRect(t,p,r,l),e.strokeRect(t,p,r,l),e.fillStyle=a.backgroundColor,e.fillRect(s,p+1,r-2,l-2))}e.fillStyle=this.labelTextColors[s]}drawBody(e,t,s){const{body:i}=this,{bodySpacing:n,bodyAlign:a,displayColors:o,boxHeight:l,boxWidth:r,boxPadding:c}=s,d=Xn(s.bodyFont);let h=d.lineHeight,u=0;const p=Ka(s.rtl,this.x,this.width),g=function(s){t.fillText(s,p.x(e.x+u),e.y+h/2),e.y+=h+n},f=p.textAlign(a);let m,b,y,x,v,k,_;for(t.textAlign=a,t.textBaseline="middle",t.font=d.string,e.x=Jd(this,f,s),t.fillStyle=s.bodyColor,js(this.beforeBody,g),u=o&&"right"!==f?"center"===a?r/2+c:r+2+c:0,x=0,k=i.length;x0&&t.stroke()}_updateAnimationTarget(e){const t=this.chart,s=this.$animations,i=s&&s.x,n=s&&s.y;if(i||n){const s=Wd[e.position].call(this,this._active,this._eventPosition);if(!s)return;const a=this._size=jd(this,e),o=Object.assign({},s,this._size),l=Kd(t,e,o),r=Gd(e,o,l,t);i._to===r.x&&n._to===r.y||(this.xAlign=l.xAlign,this.yAlign=l.yAlign,this.width=a.width,this.height=a.height,this.caretX=s.x,this.caretY=s.y,this._resolveAnimations().update(this,r))}}_willRender(){return!!this.opacity}draw(e){const t=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(t);const i={width:this.width,height:this.height},n={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=qn(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=s,this.drawBackground(n,e,i,t),Qa(e,t.textDirection),n.y+=a.top,this.drawTitle(n,e,t),this.drawBody(n,e,t),this.drawFooter(n,e,t),Ya(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){const s=this._active,i=e.map(({datasetIndex:e,index:t})=>{const s=this.chart.getDatasetMeta(e);if(!s)throw new Error("Cannot find a dataset at index "+e);return{datasetIndex:e,element:s.data[t],index:t}}),n=!Hs(s,i),a=this._positionChanged(i,t);(n||a)&&(this._active=i,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,s=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,n=this._active||[],a=this._getActiveElements(e,n,t,s),o=this._positionChanged(a,e),l=t||!Hs(a,n)||o;return l&&(this._active=a,(i.enabled||i.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),l}_getActiveElements(e,t,s,i){const n=this.options;if("mouseout"===e.type)return[];if(!i)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&void 0!==this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index));const a=this.chart.getElementsAtEventForMode(e,n.mode,n,s);return n.reverse&&a.reverse(),a}_positionChanged(e,t){const{caretX:s,caretY:i,options:n}=this,a=Wd[n.position].call(this,e,t);return!1!==a&&(s!==a.x||i!==a.y)}}(0,Bt.A)(nh,"positioners",Wd);var ah={id:"tooltip",_element:nh,positioners:Wd,afterInit(e,t,s){s&&(e.tooltip=new nh({chart:e,options:s}))},beforeUpdate(e,t,s){e.tooltip&&e.tooltip.initialize(s)},reset(e,t,s){e.tooltip&&e.tooltip.initialize(s)},afterDraw(e){const t=e.tooltip;if(t&&t._willRender()){const s={tooltip:t};if(!1===e.notifyPlugins("beforeTooltipDraw",{...s,cancelable:!0}))return;t.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",s)}},afterEvent(e,t){if(e.tooltip){const s=t.replay;e.tooltip.handleEvent(t.event,s,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:sh},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>"filter"!==e&&"itemSort"!==e&&"external"!==e,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const oh=(e,t,s,i)=>("string"===typeof t?(s=e.push(t)-1,i.unshift({index:s,label:t})):isNaN(t)&&(s=null),s);function lh(e,t,s,i){const n=e.indexOf(t);if(-1===n)return oh(e,t,s,i);const a=e.lastIndexOf(t);return n!==a?s:n}const rh=(e,t)=>null===e?null:$i(Math.round(e),0,t);function ch(e){const t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}function hh(e,t){const s=[],i=1e-14,{bounds:n,step:a,min:o,max:l,precision:r,count:c,maxTicks:d,maxDigits:h,includeBounds:u}=e,p=a||1,g=d-1,{min:f,max:m}=t,b=!Es(o),y=!Es(l),x=!Es(c),v=(m-f)/(h+1);let k,_,w,C,S=yi((m-f)/g/p)*p;if(Sg&&(S=yi(C*S/g/p)*p),Es(r)||(k=Math.pow(10,r),S=Math.ceil(S*k)/k),"ticks"===n?(_=Math.floor(f/S)*S,w=Math.ceil(m/S)*S):(_=f,w=m),b&&y&&a&&_i((l-o)/a,S/1e3)?(C=Math.round(Math.min((l-o)/S,d)),S=(l-o)/C,_=o,w=l):x?(_=b?o:_,w=y?l:w,C=c-1,S=(w-_)/C):(C=(w-_)/S,C=bi(C,Math.round(C),S/1e3)?Math.round(C):Math.ceil(C));const F=Math.max(Fi(S),Fi(_));k=Math.pow(10,Es(r)?F:r),_=Math.round(_*k)/k,w=Math.round(w*k)/k;let T=0;for(b&&(u&&_!==o?(s.push({value:o}),_l)break;s.push({value:e})}return y&&u&&w!==l?s.length&&bi(s[s.length-1].value,l,uh(l,v,e))?s[s.length-1].value=l:s.push({value:l}):y&&w!==l||s.push({value:w}),s}function uh(e,t,{horizontal:s,minRotation:i}){const n=Ci(i),a=(s?Math.sin(n):Math.cos(n))||.001,o=.75*t*(""+e).length;return Math.min(t/a,o)}(0,Bt.A)(dh,"id","category"),(0,Bt.A)(dh,"defaults",{ticks:{callback:ch}});class ph extends Pr{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return Es(e)||("number"===typeof e||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){const{beginAtZero:e}=this.options,{minDefined:t,maxDefined:s}=this.getUserBounds();let{min:i,max:n}=this;const a=e=>i=t?i:e,o=e=>n=s?n:e;if(e){const e=mi(i),t=mi(n);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(i===n){let t=0===n?1:Math.abs(.05*n);o(n+t),e||a(i-t)}this.min=i,this.max=n}getTickLimit(){const e=this.options.ticks;let t,{maxTicksLimit:s,stepSize:i}=e;return i?(t=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,t>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${t} ticks. Limiting to 1000.`),t=1e3)):(t=this.computeTickLimit(),s=s||11),s&&(t=Math.min(s,t)),t}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const e=this.options,t=e.ticks;let s=this.getTickLimit();s=Math.max(2,s);const i={maxTicks:s,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:!1!==t.includeBounds},n=this._range||this,a=hh(i,n);return"ticks"===e.bounds&&wi(a,this,"value"),e.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const e=this.ticks;let t=this.min,s=this.max;if(super.configure(),this.options.offset&&e.length){const i=(s-t)/Math.max(e.length-1,1)/2;t-=i,s+=i}this._startValue=t,this._endValue=s,this._valueRange=s-t}getLabelForValue(e){return hn(e,this.chart.options.locale,this.options.ticks.format)}}class gh extends ph{determineDataLimits(){const{min:e,max:t}=this.getMinMax(!0);this.min=Os(e)?e:0,this.max=Os(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){const e=this.isHorizontal(),t=e?this.width:this.height,s=Ci(this.options.ticks.minRotation),i=(e?Math.sin(s):Math.cos(s))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,n.lineHeight/i))}getPixelForValue(e){return null===e?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}}(0,Bt.A)(gh,"id","linear"),(0,Bt.A)(gh,"defaults",{ticks:{callback:gn.formatters.numeric}});const fh=e=>Math.floor(fi(e)),mh=(e,t)=>Math.pow(10,fh(e)+t);function bh(e){const t=e/Math.pow(10,fh(e));return 1===t}function yh(e,t,s){const i=Math.pow(10,s),n=Math.floor(e/i),a=Math.ceil(t/i);return a-n}function xh(e,t){const s=t-e;let i=fh(s);while(yh(e,t,i)>10)i++;while(yh(e,t,i)<10)i--;return Math.min(i,fh(e))}function vh(e,{min:t,max:s}){t=Rs(e.min,t);const i=[],n=fh(t);let a=xh(t,s),o=a<0?Math.pow(10,Math.abs(a)):1;const l=Math.pow(10,a),r=n>a?Math.pow(10,n):0,c=Math.round((t-r)*o)/o,d=Math.floor((t-r)/l/10)*l*10;let h=Math.floor((c-d)/Math.pow(10,a)),u=Rs(e.min,Math.round((r+d+h*Math.pow(10,a))*o)/o);while(u=10?h=h<15?15:20:h++,h>=20&&(a++,h=2,o=a>=0?1:o),u=Math.round((r+d+h*Math.pow(10,a))*o)/o;const p=Rs(e.max,u);return i.push({value:p,major:bh(p),significand:h}),i}class kh extends Pr{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){const s=ph.prototype.parse.apply(this,[e,t]);if(0!==s)return Os(s)&&s>0?s:null;this._zero=!0}determineDataLimits(){const{min:e,max:t}=this.getMinMax(!0);this.min=Os(e)?Math.max(0,e):null,this.max=Os(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Os(this._userMin)&&(this.min=e===mh(this.min,0)?mh(this.min,-1):mh(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:e,maxDefined:t}=this.getUserBounds();let s=this.min,i=this.max;const n=t=>s=e?s:t,a=e=>i=t?i:e;s===i&&(s<=0?(n(1),a(10)):(n(mh(s,-1)),a(mh(i,1)))),s<=0&&n(mh(i,-1)),i<=0&&a(mh(s,1)),this.min=s,this.max=i}buildTicks(){const e=this.options,t={min:this._userMin,max:this._userMax},s=vh(t,this);return"ticks"===e.bounds&&wi(s,this,"value"),e.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(e){return void 0===e?"0":hn(e,this.chart.options.locale,this.options.ticks.format)}configure(){const e=this.min;super.configure(),this._startValue=fi(e),this._valueRange=fi(this.max)-fi(e)}getPixelForValue(e){return void 0!==e&&0!==e||(e=this.min),null===e||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(fi(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const t=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+t*this._valueRange)}}function _h(e){const t=e.ticks;if(t.display&&e.display){const e=qn(t.backdropPadding);return Ws(t.font&&t.font.size,kn.font.size)+e.height}return 0}function wh(e,t,s){return s=Is(s)?s:[s],{w:Cn(e,t.string,s),h:s.length*t.lineHeight}}function Ch(e,t,s,i,n){return e===i||e===n?{start:t-s/2,end:t+s/2}:en?{start:t-s,end:t}:{start:t,end:t+s}}function Sh(e){const t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},s=Object.assign({},t),i=[],n=[],a=e._pointLabels.length,o=e.options.pointLabels,l=o.centerPointLabels?li/a:0;for(let r=0;rt.r&&(l=(i.end-t.r)/a,e.r=Math.max(e.r,t.r+l)),n.startt.b&&(r=(n.end-t.b)/o,e.b=Math.max(e.b,t.b+r))}function Th(e,t,s){const i=e.drawingArea,{extra:n,additionalAngle:a,padding:o,size:l}=s,r=e.getPointPosition(t,i+n+o,a),c=Math.round(Si(Di(r.angle+ui))),d=$h(r.y,l.h,c),h=Dh(c),u=Ah(r.x,l.w,h);return{visible:!0,x:r.x,y:d,textAlign:h,left:u,top:d,right:u+l.w,bottom:d+l.h}}function Mh(e,t){if(!t)return!0;const{left:s,top:i,right:n,bottom:a}=e,o=Pn({x:s,y:i},t)||Pn({x:s,y:a},t)||Pn({x:n,y:i},t)||Pn({x:n,y:a},t);return!o}function Ph(e,t,s){const i=[],n=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:l}=a.pointLabels,r={extra:_h(a)/2,additionalAngle:o?li/n:0};let c;for(let d=0;d270||s<90)&&(e-=t),e}function Lh(e,t,s){const{left:i,top:n,right:a,bottom:o}=s,{backdropColor:l}=t;if(!Es(l)){const s=Hn(t.borderRadius),r=qn(t.backdropPadding);e.fillStyle=l;const c=i-r.left,d=n-r.top,h=a-i+r.width,u=o-n+r.height;Object.values(s).some(e=>0!==e)?(e.beginPath(),On(e,{x:c,y:d,w:h,h:u,radius:s}),e.fill()):e.fillRect(c,d,h,u)}}function Vh(e,t){const{ctx:s,options:{pointLabels:i}}=e;for(let n=t-1;n>=0;n--){const t=e._pointLabelItems[n];if(!t.visible)continue;const a=i.setContext(e.getPointLabelContext(n));Lh(s,a,t);const o=Xn(a.font),{x:l,y:r,textAlign:c}=t;Un(s,e._pointLabels[n],l,r+o.lineHeight/2,o,{color:a.color,textAlign:c,textBaseline:"middle"})}}function Eh(e,t,s,i){const{ctx:n}=e;if(s)n.arc(e.xCenter,e.yCenter,t,0,ri);else{let s=e.getPointPosition(0,t);n.moveTo(s.x,s.y);for(let a=1;a{const s=Ns(this.options.pointLabels.callback,[e,t],this);return s||0===s?s:""}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){const e=this.options;e.display&&e.pointLabels.display?Sh(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,s,i){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((s-i)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,s,i))}getIndexAngle(e){const t=ri/(this._pointLabels.length||1),s=this.options.startAngle||0;return Di(e*t+Ci(s))}getDistanceFromCenterForValue(e){if(Es(e))return NaN;const t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(Es(e))return NaN;const t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){const t=this._pointLabels||[];if(e>=0&&e{if(0!==t||0===t&&this.min<0){l=this.getDistanceFromCenterForValue(e.value);const s=this.getContext(t),o=i.setContext(s),r=n.setContext(s);Ih(this,o,l,a,r)}}),s.display){for(e.save(),o=a-1;o>=0;o--){const i=s.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:a}=i;a&&n&&(e.lineWidth=a,e.strokeStyle=n,e.setLineDash(i.borderDash),e.lineDashOffset=i.borderDashOffset,l=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),r=this.getPointPosition(o,l),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(r.x,r.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const e=this.ctx,t=this.options,s=t.ticks;if(!s.display)return;const i=this.getIndexAngle(0);let n,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(i),e.textAlign="center",e.textBaseline="middle",this.ticks.forEach((i,o)=>{if(0===o&&this.min>=0&&!t.reverse)return;const l=s.setContext(this.getContext(o)),r=Xn(l.font);if(n=this.getDistanceFromCenterForValue(this.ticks[o].value),l.showLabelBackdrop){e.font=r.string,a=e.measureText(i.label).width,e.fillStyle=l.backdropColor;const t=qn(l.backdropPadding);e.fillRect(-a/2-t.left,-n-r.size/2-t.top,a+t.width,r.size+t.height)}Un(e,i.label,0,-n,r,{color:l.color,strokeColor:l.textStrokeColor,strokeWidth:l.textStrokeWidth})}),e.restore()}drawTitle(){}}(0,Bt.A)(Oh,"id","radialLinear"),(0,Bt.A)(Oh,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:gn.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(e){return e},padding:5,centerPointLabels:!1}}),(0,Bt.A)(Oh,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),(0,Bt.A)(Oh,"descriptors",{angleLines:{_fallback:"grid"}});const Rh={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Wh=Object.keys(Rh);function Bh(e,t){return e-t}function zh(e,t){if(Es(t))return null;const s=e._adapter,{parser:i,round:n,isoWeekday:a}=e._parseOpts;let o=t;return"function"===typeof i&&(o=i(o)),Os(o)||(o="string"===typeof i?s.parse(o,i):s.parse(o)),null===o?null:(n&&(o="week"!==n||!ki(a)&&!0!==a?s.startOf(o,n):s.startOf(o,"isoWeek",a)),+o)}function Nh(e,t,s,i){const n=Wh.length;for(let a=Wh.indexOf(e);a=Wh.indexOf(s);a--){const s=Wh[a];if(Rh[s].common&&e._adapter.diff(n,i,s)>=t-1)return s}return Wh[s?Wh.indexOf(s):0]}function Hh(e){for(let t=Wh.indexOf(e)+1,s=Wh.length;t=t?s[i]:s[n];e[a]=!0}}else e[t]=!0}function Xh(e,t,s,i){const n=e._adapter,a=+n.startOf(t[0].value,i),o=t[t.length-1].value;let l,r;for(l=a;l<=o;l=+n.add(l,1,i))r=s[l],r>=0&&(t[r].major=!0);return t}function Kh(e,t,s){const i=[],n={},a=t.length;let o,l;for(o=0;o+e.value))}initOffsets(e=[]){let t,s,i=0,n=0;this.options.offset&&e.length&&(t=this.getDecimalForValue(e[0]),i=1===e.length?1-t:(this.getDecimalForValue(e[1])-t)/2,s=this.getDecimalForValue(e[e.length-1]),n=1===e.length?s:(s-this.getDecimalForValue(e[e.length-2]))/2);const a=e.length<3?.5:.25;i=$i(i,0,a),n=$i(n,0,a),this._offsets={start:i,end:n,factor:1/(i+1+n)}}_generate(){const e=this._adapter,t=this.min,s=this.max,i=this.options,n=i.time,a=n.unit||Nh(n.minUnit,t,s,this._getLabelCapacity(t)),o=Ws(i.ticks.stepSize,1),l="week"===a&&n.isoWeekday,r=ki(l)||!0===l,c={};let d,h,u=t;if(r&&(u=+e.startOf(u,"isoWeek",l)),u=+e.startOf(u,r?"day":a),e.diff(s,t,a)>1e5*o)throw new Error(t+" and "+s+" are too far apart with stepSize of "+o+" "+a);const p="data"===i.ticks.source&&this.getDataTimestamps();for(d=u,h=0;d+e)}getLabelForValue(e){const t=this._adapter,s=this.options.time;return s.tooltipFormat?t.format(e,s.tooltipFormat):t.format(e,s.displayFormats.datetime)}format(e,t){const s=this.options,i=s.time.displayFormats,n=this._unit,a=t||i[n];return this._adapter.format(e,a)}_tickFormatFunction(e,t,s,i){const n=this.options,a=n.ticks.callback;if(a)return Ns(a,[e,t,s],this);const o=n.time.displayFormats,l=this._unit,r=this._majorUnit,c=l&&o[l],d=r&&o[r],h=s[t],u=r&&d&&h&&h.major;return this._adapter.format(e,i||(u?d:c))}generateTickLabels(e){let t,s,i;for(t=0,s=e.length;t0?o:1}getDataTimestamps(){let e,t,s=this._cache.data||[];if(s.length)return s;const i=this.getMatchingVisibleMetas();if(this._normalized&&i.length)return this._cache.data=i[0].controller.getAllParsedValues(this);for(e=0,t=i.length;e=e[l].pos&&t<=e[r].pos&&({lo:l,hi:r}=Ii(e,"pos",t)),({pos:i,time:a}=e[l]),({pos:n,time:o}=e[r])):(t>=e[l].time&&t<=e[r].time&&({lo:l,hi:r}=Ii(e,"time",t)),({time:i,pos:a}=e[l]),({time:n,pos:o}=e[r]));const c=n-i;return c?a+(o-a)*(t-i)/c:a}(0,Bt.A)(Qh,"id","time"),(0,Bt.A)(Qh,"defaults",{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});class Gh extends Qh{constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Yh(t,this.min),this._tableRange=Yh(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){const{min:t,max:s}=this,i=[],n=[];let a,o,l,r,c;for(a=0,o=e.length;a=t&&r<=s&&i.push(r);if(i.length<2)return[{time:t,pos:0},{time:s,pos:1}];for(a=0,o=i.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;const t=this.getDataTimestamps(),s=this.getLabelTimestamps();return e=t.length&&s.length?this.normalize(t.concat(s)):t.length?t:s,e=this._cache.all=e,e}getDecimalForValue(e){return(Yh(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){const t=this._offsets,s=this.getDecimalForPixel(e)/t.factor-t.end;return Yh(this._table,s*this._tableRange+this._minPos,!0)}}(0,Bt.A)(Gh,"id","timeseries"),(0,Bt.A)(Gh,"defaults",Qh.defaults);var Jh=s(90144);const Zh={data:{type:Object,required:!0},options:{type:Object,default:()=>({})},plugins:{type:Array,default:()=>[]},datasetIdKey:{type:String,default:"label"},updateMode:{type:String,default:void 0}},eu={ariaLabel:{type:String},ariaDescribedby:{type:String}},tu={type:{type:String,required:!0},destroyDelay:{type:Number,default:0},...Zh,...eu},su="2"===i.rE[0]?(e,t)=>Object.assign(e,{attrs:t}):(e,t)=>Object.assign(e,t);function iu(e){return(0,Jh.ju)(e)?(0,Jh.ux)(e):e}function nu(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return(0,Jh.ju)(t)?new Proxy(e,{}):e}function au(e,t){const s=e.options;s&&t&&Object.assign(s,t)}function ou(e,t){e.labels=t}function lu(e,t,s){const i=[];e.datasets=t.map(t=>{const n=e.datasets.find(e=>e[s]===t[s]);return n&&t.data&&!i.includes(n)?(i.push(n),Object.assign(n,t),n):{...t}})}function ru(e,t){const s={labels:[],datasets:[]};return ou(s,e.labels),lu(s,e.datasets,t),s}const cu=(0,i.pM)({props:tu,setup(e,t){let{expose:s,slots:n}=t;const a=(0,Jh.KR)(null),o=(0,Jh.IJ)(null);s({chart:o});const l=()=>{if(!a.value)return;const{type:t,data:s,options:i,plugins:n,datasetIdKey:l}=e,r=ru(s,l),c=nu(r,s);o.value=new yc(a.value,{type:t,data:c,options:{...i},plugins:n})},r=()=>{const t=(0,Jh.ux)(o.value);t&&(e.destroyDelay>0?setTimeout(()=>{t.destroy(),o.value=null},e.destroyDelay):(t.destroy(),o.value=null))},c=t=>{t.update(e.updateMode)};return(0,i.sV)(l),(0,i.hi)(r),(0,i.wB)([()=>e.options,()=>e.data],(t,s)=>{let[n,a]=t,[l,r]=s;const d=(0,Jh.ux)(o.value);if(!d)return;let h=!1;if(n){const e=iu(n),t=iu(l);e&&e!==t&&(au(d,e),h=!0)}if(a){const t=iu(a.labels),s=iu(r.labels),i=iu(a.datasets),n=iu(r.datasets);t!==s&&(ou(d.config.data,t),h=!0),i&&i!==n&&(lu(d.config.data,i,e.datasetIdKey),h=!0)}h&&(0,i.dY)(()=>{c(d)})},{deep:!0}),()=>(0,i.h)("canvas",{role:"img","aria-label":e.ariaLabel,"aria-describedby":e.ariaDescribedby,ref:a},[(0,i.h)("p",{},[n.default?n.default():""])])}});function du(e,t){return yc.register(t),(0,i.pM)({props:Zh,setup(t,s){let{expose:n}=s;const a=(0,Jh.IJ)(null),o=e=>{a.value=e?.chart};return n({chart:a}),()=>(0,i.h)(cu,su({ref:o},{type:e,...t}))}})}const hu=du("doughnut",al),uu=du("line",ol);s(79577),s(41549),s(49797),s(49631),s(35623);class pu extends Error{constructor(e,t,s=!1,i=""){super(e),this.name="BatchOperationError",this.code=t,this.recoverable=s,this.suggestion=i}}const gu={401:()=>new pu("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录"),403:()=>new pu("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限"),400:e=>new pu(`请求数据无效: ${e}`,"INVALID_DATA",!0,"请检查数据格式后重试"),500:()=>new pu("服务器内部错误","SERVER_ERROR",!0,"请稍后重试,如果问题持续请联系管理员"),NETWORK:()=>new pu("网络连接失败","NETWORK_ERROR",!0,"请检查网络连接后重试"),ABORT:()=>new pu("操作已取消","ABORTED",!1,"")};function fu(e,t=""){if("AbortError"===e.name)return gu.ABORT();if(e instanceof Response||e&&"number"===typeof e.status){const s=gu[e.status];return s?s(t):new pu(`请求失败: ${e.status}`,"HTTP_ERROR",!0,"请稍后重试")}return e instanceof TypeError&&e.message.includes("fetch")?gu.NETWORK():new pu(e.message||"未知错误","UNKNOWN_ERROR",!0,"请稍后重试")}class mu{constructor(e={}){this.batchSize=e.batchSize||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.abortController=null}async fetchAllRecords(e=!1){this.abortController=new AbortController;const t=[];let s=null,i=0,n=0;try{do{if(this.abortController.signal.aborted)break;const a=await this.fetchBatch(s,e);t.push(...a.records),s=a.nextCursor,i+=a.records.length,n++,this.onProgress({phase:"fetching",current:i,batchCount:n,message:`已获取 ${i} 条记录...`})}while(s&&!this.abortController.signal.aborted);if(this.abortController.signal.aborted)throw gu.ABORT();return t}catch(a){const e=a instanceof pu?a:fu(a);throw this.onError(e),e}}async fetchBatch(e,t){const s=new URLSearchParams;e&&s.set("cursor",e),t&&s.set("includeValue","true"),s.set("limit",String(this.batchSize));try{const e=await(0,Rt.A)(`/api/manage/batch/list?${s}`,{signal:this.abortController.signal});if(!e.ok){let t="";try{const s=await e.json();t=s.error||""}catch{}throw fu(e,t)}const t=await e.json();if(!t.success)throw new pu(t.error||"请求失败","API_ERROR",!0,"请稍后重试");return{records:t.records||[],nextCursor:t.nextCursor||null,totalProcessed:t.totalProcessed||0}}catch(i){if(i instanceof pu)throw i;throw fu(i)}}abort(){this.abortController&&this.abortController.abort()}isAborted(){return!!this.abortController&&this.abortController.signal.aborted}reset(){this.abortController=null}}var bu=mu;class yu{constructor(e={}){this.chunkSize=e.chunkSize||null,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.sessionId=this.generateSessionId(),this.aborted=!1}async fetchConfig(){try{const e=await(0,Rt.A)("/api/manage/batch/index/config");if(!e.ok)throw new Error("获取配置失败");const t=await e.json();if(t.success)return{chunkSize:t.chunkSize||500,databaseType:t.databaseType||"unknown"};throw new Error(t.error||"获取配置失败")}catch(e){return console.warn("Failed to fetch index config, using default:",e),{chunkSize:500,databaseType:"unknown"}}}async rebuild(){this.aborted=!1;try{if(!this.chunkSize){const e=await this.fetchConfig();this.chunkSize=e.chunkSize}this.onProgress({phase:"fetching",message:"正在获取数据...",current:0});const e=new bu({onProgress:e=>this.onProgress({...e,phase:"fetching"}),onError:e=>this.onError(e)}),t=await e.fetchAllRecords(!1);if(this.aborted)throw new pu("操作已取消","ABORTED",!1,"");if(this.onProgress({phase:"sorting",message:"正在排序...",current:0,total:t.length}),this.sortByTimestampDescending(t),this.aborted)throw new pu("操作已取消","ABORTED",!1,"");const s=this.splitIntoChunks(t);for(let i=0;i{const s=e.metadata&&e.metadata.TimeStamp||0,i=t.metadata&&t.metadata.TimeStamp||0;return i-s})}splitIntoChunks(e){const t=[];for(let s=0;se.toString(16).padStart(2,"0")).join("")}let n=2166136261,a=2166136261;for(let o=0;o>>0,a=Math.imul(a^i[o],16777635)>>>0;return n.toString(16).padStart(8,"0")+a.toString(16).padStart(8,"0")}createHttpError(e,t=""){switch(e){case 401:return new pu("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录");case 403:return new pu("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限");case 400:return new pu(`请求数据无效: ${t}`,"INVALID_DATA",!0,"请检查数据格式后重试");case 404:return new pu("会话不存在","SESSION_NOT_FOUND",!1,"请重新开始索引重建");case 410:return new pu("会话已过期","SESSION_EXPIRED",!1,"请重新开始索引重建");case 500:default:return new pu(`服务器错误: ${t||e}`,"SERVER_ERROR",!0,"请稍后重试")}}sleep(e){return new Promise(t=>setTimeout(t,e))}abort(){this.aborted=!0}reset(){this.aborted=!1,this.sessionId=this.generateSessionId()}}var xu=yu;class vu{constructor(e={}){this.onProgress=e.onProgress||(()=>{}),this.processor=null}async generateBackup(){this.processor=new bu({onProgress:e=>this.onProgress({...e,phase:"fetching"})});const e=await this.processor.fetchAllRecords(!0);this.onProgress({phase:"building",message:"正在构建备份数据..."});const t={timestamp:Date.now(),version:Wt.rE,data:{fileCount:e.length,files:{},settings:{}}};for(const n of e)t.data.files[n.id]={metadata:n.metadata,value:n.value||null};const s=await this.fetchSettings();t.data.settings=s,this.onProgress({phase:"downloading",message:"正在生成下载..."}),this.downloadBackup(t);const i=Object.keys(s).length;return{success:!0,fileCount:e.length,settingsCount:i}}async fetchSettings(){try{const e=await(0,Rt.A)("/api/manage/batch/settings");if(!e.ok)return console.warn("Failed to fetch settings:",e.status),{};const t=await e.json();return t.settings||{}}catch(e){return console.warn("Failed to fetch settings:",e),{}}}downloadBackup(e){const t=JSON.stringify(e,null,2),s=new Blob([t],{type:"application/json"}),i=URL.createObjectURL(s),n=document.createElement("a");n.href=i,n.download=`imgbed_backup_${(new Date).toISOString().split("T")[0]}.json`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(i)}abort(){this.processor&&this.processor.abort()}isAborted(){return!!this.processor&&this.processor.isAborted()}}var ku=vu;class _u{constructor(e={}){this.chunkSize=e.chunkSize||50,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.aborted=!1}async restore(e){if(this.aborted=!1,!e||!e.data)throw new pu("备份文件格式无效","INVALID_BACKUP",!1,"请选择有效的备份文件");const{files:t={},settings:s={}}=e.data,i=Object.entries(t),n=Object.entries(s),a=i.length,o=n.length,l=a+o;let r=0,c=0,d=0,h=0;try{this.onProgress({phase:"restoring_files",message:"正在恢复文件数据...",current:0,total:l});const t=this.splitIntoChunks(i,this.chunkSize);for(let e=0;esetTimeout(t,e))}abort(){this.aborted=!0}}var wu=_u;yc.register(Mc,ah,Rd,dh,gh,Nc,Bc,Dd);const Cu=864e5;function Su(e){return String(e).padStart(2,"0")}function Fu(e){return`${e.getFullYear()}-${Su(e.getMonth()+1)}-${Su(e.getDate())}`}function Tu(){const e=new Date;e.setHours(0,0,0,0);const t=new Date(e.getTime()-6*Cu);return[Fu(t),Fu(e)]}var Mu={name:"SysCogStatus",components:{Doughnut:hu,Line:uu,DateRangeCalendar:q},data(){return{loading:!1,rebuilding:!1,backing:!1,restoring:!1,indexInfo:{},indexInfoLoaded:!1,indexInfoError:!1,currentTime:new Date,clockTimer:null,version:Wt.rE,loadErrors:{newest:!1,oldest:!1},trendGroupBy:"channel",trendDatePickerVisible:!1,trendDateRange:Tu(),channelColors:["#8B5CF6","#EC4899","#06B6D4","#10B981","#F59E0B","#EF4444","#2563EB","#84CC16"],typeColors:["#10B981","#3B82F6","#F59E0B","#EF4444","#8B5CF6","#EC4899","#06B6D4","#84CC16"],trendColors:["#2563EB","#10B981","#F59E0B","#EF4444","#8B5CF6","#06B6D4","#EC4899","#84CC16","#64748B"],isProcessing:!1,processingPhase:"",processingProgress:{current:0,total:0,message:"",percentage:0},processingError:null,processingStartTime:null,currentRebuilder:null,currentBackupGenerator:null,currentRestoreProcessor:null}},computed:{currentLocale(){return String(this.$i18n.locale||"zh-CN")},indexedFileCount(){return Number(this.indexInfo.totalFiles||0)},uploadChannelCount(){return Object.keys(this.indexInfo.channelStats||{}).length},systemHealthState(){return this.indexInfoError?"attention":this.indexInfoLoaded?"healthy":"checking"},systemHealthLabel(){return this.$t(`sysStatus.health${this.systemHealthState.charAt(0).toUpperCase()}${this.systemHealthState.slice(1)}`)},greetingTitle(){const e=this.currentTime.getHours();return e<5?this.$t("sysStatus.greetingLateNight"):e<11?this.$t("sysStatus.greetingMorning"):e<14?this.$t("sysStatus.greetingNoon"):e<18?this.$t("sysStatus.greetingAfternoon"):e<23?this.$t("sysStatus.greetingEvening"):this.$t("sysStatus.greetingLateNight")},systemStatusSummary(){return this.indexInfoError?this.$t("sysStatus.summaryUnavailable"):this.indexInfoLoaded?0===this.indexedFileCount?this.$t("sysStatus.summaryEmpty"):0===this.uploadChannelCount?this.$t("sysStatus.summaryIndexed",{files:this.indexedFileCount.toLocaleString(this.currentLocale)}):this.$t("sysStatus.summaryHealthy",{files:this.indexedFileCount.toLocaleString(this.currentLocale),channels:this.uploadChannelCount.toLocaleString(this.currentLocale)}):this.$t("sysStatus.summaryChecking")},currentDateLabel(){return new Intl.DateTimeFormat(this.currentLocale,{year:"numeric",month:"long",day:"numeric",weekday:"long"}).format(this.currentTime)},currentTimeLabel(){return new Intl.DateTimeFormat(this.currentLocale,{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(this.currentTime)},timeZoneLabel(){const e=Intl.DateTimeFormat().resolvedOptions().timeZone||this.$t("sysStatus.localTimezone"),t=-this.currentTime.getTimezoneOffset(),s=t>=0?"+":"-",i=Math.abs(t),n=Math.floor(i/60),a=i%60,o=0===a?`UTC${s}${n}`:`UTC${s}${n}:${String(a).padStart(2,"0")}`;return`${e} · ${o}`},channelChartData(){const e=this.indexInfo.channelStats||{};return{labels:Object.keys(e),datasets:[{data:Object.values(e),backgroundColor:this.channelColors.slice(0,Object.keys(e).length),borderWidth:0}]}},typeChartData(){const e=this.aggregatedTypeStats;return{labels:Object.keys(e),datasets:[{data:Object.values(e),backgroundColor:this.typeColors.slice(0,Object.keys(e).length),borderWidth:0}]}},aggregatedTypeStats(){const e=this.indexInfo.typeStats||{},t={};for(const[s,i]of Object.entries(e)){const e="Block"===s?this.$t("sysStatus.blocked"):this.$t("sysStatus.normalStatus");t[e]=(t[e]||0)+i}return t},currentTrendGroup(){const e=this.indexInfo.uploadTrend||{},t=e.groupBy||{};return t[this.trendGroupBy]||{series:[]}},trendRawLabels(){const e=this.indexInfo.uploadTrend||{};return e.labels||[]},trendRangeCrossesYear(){const e=new Set;return this.trendRawLabels.forEach(t=>{this.extractTrendLabelDates(t).forEach(t=>e.add(t.year))}),e.size>1},trendDisplayLabels(){return this.trendRawLabels.map(e=>this.formatTrendAxisLabel(e))},hasTrendData(){const e=this.indexInfo.uploadTrend||{};return(e.labels||[]).length>0},trendDateDialogWidth(){return window.innerWidth>768?"420px":"90%"},uploadTrendChartData(){const e=this.indexInfo.uploadTrend||{},t=this.currentTrendGroup.series||[],s="#F97316";return{labels:this.trendDisplayLabels,datasets:[{label:this.$t("sysStatus.totalUploads"),data:e.total||[],borderColor:s,backgroundColor:this.hexToRgba(s,.1),pointBackgroundColor:s,pointBorderColor:s,borderWidth:3,pointRadius:2,pointHoverRadius:5,tension:.28,fill:!1},...t.map((e,t)=>{const s=this.getTrendColor(t);return{label:this.formatTrendSeriesName(e),data:e.data||[],borderColor:s,backgroundColor:this.hexToRgba(s,.12),pointBackgroundColor:s,pointBorderColor:s,borderWidth:2,pointRadius:2,pointHoverRadius:5,tension:.32,fill:!1}})]}},lineChartOptions(){const e="#64748B";return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!0,position:"bottom",labels:{usePointStyle:!0,boxWidth:8,boxHeight:8,padding:16,color:e}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,callbacks:{title:e=>{const t=e?.[0]?.dataIndex;return this.trendRawLabels[t]||""},label:e=>{const t=e.parsed||{},s=void 0!==t.y?t.y:e.raw;return` ${e.dataset.label}: ${Number(s||0).toLocaleString()} ${this.$t("sysStatus.uploadsUnit")}`}}}},scales:{x:{grid:{display:!1},ticks:{color:e,maxTicksLimit:8,autoSkip:!0}},y:{beginAtZero:!0,grid:{color:"rgba(148, 163, 184, 0.18)"},ticks:{color:e,precision:0,callback:e=>Number(e).toLocaleString()}}}}},chartOptions(){return{responsive:!0,maintainAspectRatio:!0,cutout:"65%",hoverOffset:8,layout:{padding:10},plugins:{legend:{display:!1},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,z:100,callbacks:{label:e=>{const t=e.raw,s=e.dataset.data.reduce((e,t)=>e+t,0),i=(t/s*100).toFixed(1);return` ${t.toLocaleString()} (${i}%)`}}}},animation:{animateRotate:!0,animateScale:!0}}},estimatedTimeRemaining(){if(!this.isProcessing||!this.processingStartTime)return"";if(0===this.processingProgress.current||0===this.processingProgress.percentage)return"";const e=Date.now()-this.processingStartTime,t=this.processingProgress.percentage/100;if(t<=0)return"";const s=e/t,i=s-e;if(i<=0)return this.$t("sysStatus.aboutToComplete");const n=Math.ceil(i/1e3);if(n<60)return this.$t("sysStatus.seconds",{count:n});const a=Math.ceil(n/60);if(a<60)return this.$t("sysStatus.minutes",{count:a});const o=Math.floor(a/60),l=a%60;return this.$t("sysStatus.hoursMinutes",{hours:o,minutes:l})},phaseDescription(){const e={fetching:this.$t("sysStatus.phaseFetching"),sorting:this.$t("sysStatus.phaseSorting"),uploading:this.$t("sysStatus.phaseUploading"),finalizing:this.$t("sysStatus.phaseFinalizing"),building:this.$t("sysStatus.phaseBuilding"),downloading:this.$t("sysStatus.phaseDownloading"),restoring_files:this.$t("sysStatus.phaseRestoringFiles"),restoring_settings:this.$t("sysStatus.phaseRestoringSettings"),completed:this.$t("sysStatus.phaseCompleted"),retrying:this.$t("sysStatus.phaseRetrying")};return e[this.processingPhase]||this.processingPhase}},mounted(){this.fetchIndexInfo(),this.clockTimer=window.setInterval(()=>{this.currentTime=new Date},1e3)},beforeUnmount(){this.clockTimer&&(window.clearInterval(this.clockTimer),this.clockTimer=null)},methods:{getChartColor(e){return this.channelColors[e%this.channelColors.length]},getTypeChartColor(e){return this.typeColors[e%this.typeColors.length]},getTrendColor(e){return this.trendColors[e%this.trendColors.length]},formatTrendSeriesName(e){return e?.isOther||"__other__"===e?.name?this.$t("sysStatus.otherChannels"):e?.name||this.$t("sysStatus.unknown")},hexToRgba(e,t){const s=(e||"").replace("#","");if(6!==s.length)return`rgba(37, 99, 235, ${t})`;const i=parseInt(s.slice(0,2),16),n=parseInt(s.slice(2,4),16),a=parseInt(s.slice(4,6),16);return`rgba(${i}, ${n}, ${a}, ${t})`},extractTrendLabelDates(e){const t=String(e||"").match(/\d{4}-\d{2}-\d{2}/g)||[];return t.map(e=>{const[t,s,i]=e.split("-").map(Number);return{year:t,month:s,day:i}})},formatTrendAxisLabel(e){const t=this.extractTrendLabelDates(e);if(0===t.length)return e;const s=(e,t)=>{const s=`${e.month}/${e.day}`;return t?`${e.year}/${s}`:s};if(1===t.length)return s(t[0],this.trendRangeCrossesYear);const[i,n]=t;if(!this.trendRangeCrossesYear)return`${s(i,!1)}-${s(n,!1)}`;const a=i.year===n.year?s(n,!1):s(n,!0);return`${s(i,!0)}-${a}`},openTrendDateDialog(){this.trendDatePickerVisible=!0},handleTrendDateRangeChange(e){Array.isArray(e)&&2===e.length&&e[0]&&e[1]&&(this.trendDatePickerVisible=!1,this.fetchIndexInfo())},getTrendDateRangeParams(){return Array.isArray(this.trendDateRange)&&2===this.trendDateRange.length||(this.trendDateRange=Tu()),{startDate:this.trendDateRange[0],endDate:this.trendDateRange[1]}},async fetchIndexInfo(){this.loading=!0,this.indexInfoError=!1;try{const{startDate:e,endDate:t}=this.getTrendDateRangeParams(),s=new URLSearchParams({action:"info",timezoneOffset:String((new Date).getTimezoneOffset()),trendMaxPoints:"90",trendSeriesLimit:"8",trendStartDate:e,trendEndDate:t}),i=await(0,Rt.A)(`/api/manage/list?${s.toString()}`,{method:"GET"});if(!i.ok)throw new Error("API请求失败");{const e=await i.json();this.indexInfo=e,this.indexInfoLoaded=!0}}catch(e){console.error("获取索引信息失败:",e),this.indexInfoError=!0,this.$message.error(this.$t("sysStatus.fetchIndexFailed"))}finally{this.loading=!1}},async rebuildIndex(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.rebuilding=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentRebuilder=new xu({onProgress:e=>this.handleProgress(e),onError:e=>this.handleError(e)});try{const e=await this.currentRebuilder.rebuild();this.$message.success(this.$t("sysStatus.rebuildSuccess",{count:e.totalFiles.toLocaleString()})),setTimeout(()=>{this.fetchIndexInfo()},1e3)}catch(e){if("ABORTED"!==e.code){const t=e.suggestion?`${e.message}。${e.suggestion}`:e.message;this.$message.error(t),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}}}finally{this.rebuilding=!1,this.isProcessing=!1,this.currentRebuilder=null,this.processingStartTime=null}}},async backupData(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.backing=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentBackupGenerator=new ku({onProgress:e=>this.handleProgress(e)});try{const e=await this.currentBackupGenerator.generateBackup(),t=e.settingsCount>0?this.$t("sysStatus.backupSuccessWithSettings",{fileCount:e.fileCount.toLocaleString(),settingsCount:e.settingsCount}):this.$t("sysStatus.backupSuccess",{count:e.fileCount.toLocaleString()});this.$message.success(t)}catch(e){if("ABORTED"!==e.code){const t=e.suggestion?`${e.message}。${e.suggestion}`:e.message;this.$message.error(t),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}}}finally{this.backing=!1,this.isProcessing=!1,this.currentBackupGenerator=null,this.processingStartTime=null}}},selectRestoreFile(){this.restoring||this.$refs.fileInput.click()},async handleFileSelect(e){const t=e.target.files[0];if(t)if(t.name.endsWith(".json")){try{await this.$confirm(this.$t("sysStatus.restoreConfirmMessage"),this.$t("sysStatus.restoreConfirmTitle"),{confirmButtonText:this.$t("sysStatus.restoreConfirmOk"),cancelButtonText:this.$t("sysStatus.restoreConfirmCancel"),type:"warning"}),await this.restoreData(t)}catch(s){"cancel"!==s&&console.error("确认恢复失败:",s)}e.target.value=""}else this.$message.error(this.$t("sysStatus.selectJsonFile"))},async restoreData(e){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.restoring=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0};try{const s=await e.text();let i;try{i=JSON.parse(s)}catch(t){throw new Error(this.$t("sysStatus.invalidBackupFile"))}this.currentRestoreProcessor=new wu({chunkSize:100,onProgress:e=>this.handleProgress(e),onError:e=>this.handleError(e)});const n=await this.currentRestoreProcessor.restore(i);this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,this.$message.success(this.$t("sysStatus.restoreSuccess",{files:n.restoredFiles,settings:n.restoredSettings})),await new Promise(e=>setTimeout(e,500)),await this.rebuildIndex()}catch(s){if(console.error("恢复数据失败:",s),this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,"ABORTED"!==s.code){const e=s.suggestion?`${s.message}。${s.suggestion}`:s.message;this.$message.error(this.$t("sysStatus.restoreFailed")+": "+e),this.processingError={message:s.message,suggestion:s.suggestion,recoverable:s.recoverable}}}}},formatTime(e){if(!e)return this.$t("sysStatus.unknown");const t=new Date(e);return t.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},getPercentage(e,t){return t&&0!==t?Math.round(e/t*100):0},getTimeAgo(e){if(!e)return"";const t=Date.now(),s=t-e,i=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return a>0?this.$t("sysStatus.daysAgo",{count:a}):n>0?this.$t("sysStatus.hoursAgo",{count:n}):i>0?this.$t("sysStatus.minutesAgo",{count:i}):this.$t("sysStatus.justNow")},handleImageError(e){this.loadErrors[e]=!0},isValidPreview(e,t){return!this.loadErrors[e]&&(!!t?.metadata?.FileType&&(t.metadata.FileType.includes("image")||t.metadata.FileType.includes("video")))},openReleases(){window.open("https://github.com/MarSeventh/CloudFlare-ImgBed/releases","_blank")},isImageFile(e){if(!e)return!1;if(e.metadata?.FileType?.includes("image"))return!0;const t=e.metadata?.FileName||e.id||"",s=t.substring(t.lastIndexOf(".")+1).toLowerCase(),i=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","avif","heic","heif"];return i.includes(s)},isVideoFile(e){if(!e)return!1;if(e.metadata?.FileType?.includes("video"))return!0;const t=e.metadata?.FileName||e.id||"",s=t.substring(t.lastIndexOf(".")+1).toLowerCase(),i=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","m4v","3gp","mpeg","mpg"];return i.includes(s)},openFileInNewTab(e){e?.id&&window.open("/file/"+e.id+"?from=admin","_blank")},handleProgress(e){this.processingPhase=e.phase,this.processingProgress.message=e.message||"",this.processingProgress.current=e.current||0,"fetching"===e.phase?(this.processingProgress.total=e.total||0,e.total&&e.total>0?this.processingProgress.percentage=Math.min(60,e.current/e.total*60):this.processingProgress.percentage=Math.min(50,15*Math.log10(e.current+1))):"sorting"===e.phase?(this.processingProgress.percentage=65,this.processingProgress.total=e.total||this.processingProgress.total):"uploading"===e.phase?(this.processingProgress.total=e.total||0,e.total&&e.total>0&&(this.processingProgress.percentage=70+e.current/e.total*25)):"finalizing"===e.phase?this.processingProgress.percentage=97:"building"===e.phase?this.processingProgress.percentage=80:"downloading"===e.phase?this.processingProgress.percentage=95:"restoring_files"===e.phase?(this.processingProgress.total=e.total||0,this.processingProgress.percentage=e.percentage||0):"restoring_settings"===e.phase?(this.processingProgress.total=e.total||0,this.processingProgress.percentage=e.percentage||80):"completed"===e.phase?this.processingProgress.percentage=100:"retrying"===e.phase&&(this.processingProgress.message=e.message)},handleError(e){console.error("批量操作错误:",e),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}},cancelOperation(){this.currentRebuilder&&(this.currentRebuilder.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentBackupGenerator&&(this.currentBackupGenerator.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentRestoreProcessor&&(this.currentRestoreProcessor.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild")))},retryOperation(){this.processingError=null,this.rebuilding?(this.rebuilding=!1,this.isProcessing=!1,this.$nextTick(()=>{this.rebuildIndex()})):this.backing&&(this.backing=!1,this.isProcessing=!1,this.$nextTick(()=>{this.backupData()}))},dismissError(){this.processingError=null}}};const Pu=(0,d.A)(Mu,[["render",Ot],["__scopeId","data-v-776bcef4"]]);var Du=Pu,Au=s(59869),$u=(s(70415),s(73565),s(82006)),Lu=(s(98642),s(81418)),Vu=(s(50333),s(39623)),Eu=(s(29092),s(63003),s(76018)),Iu=(s(96808),s(67819),s(55558)),Uu=(s(10456),s(12687)),Ou=(s(18785),s(97769));const Ru=["onClick"];function Wu(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=Ou.A;return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["custom-select",{"is-open":o.isOpen}]),style:(0,n.Tr)({width:s.width})},[(0,i.Lk)("div",{class:"custom-select-trigger",onClick:t[0]||(t[0]=(...e)=>l.toggleDropdown&&l.toggleDropdown(...e))},[(0,i.Lk)("span",{class:(0,n.C4)(["custom-select-value",{"is-placeholder":!s.modelValue}])},(0,n.v_)(l.displayLabel),3),(0,i.bF)(r,{icon:"chevron-down",class:"custom-select-arrow"})]),(0,i.bF)(C.eB,{name:"dropdown-fade"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:"custom-select-dropdown",onClick:t[1]||(t[1]=(0,C.D$)(()=>{},["stop"]))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s.options,t=>((0,i.uX)(),(0,i.CE)("div",{key:t.value,class:(0,n.C4)(["custom-select-option",{"is-selected":s.modelValue===t.value}]),onClick:e=>l.selectOption(t.value)},[(0,i.RG)(e.$slots,"option",{option:t},()=>[t.channelType?((0,i.uX)(),(0,i.Wv)(c,{key:0,type:t.channelType,class:(0,n.C4)(["option-icon",t.iconClass])},null,8,["type","class"])):t.icon?((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:t.icon,class:(0,n.C4)(["option-icon",t.iconClass])},null,8,["icon","class"])):(0,i.Q3)("",!0),(0,i.Lk)("span",null,(0,n.v_)(t.label),1)],!0)],10,Ru))),128))],512),[[C.aG,o.isOpen]])]),_:3})],6)}var Bu={name:"CustomSelect",components:{ChannelIcon:Ou.A},props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:""},width:{type:String,default:"160px"}},emits:["update:modelValue","change"],data(){return{isOpen:!1}},computed:{resolvedPlaceholder(){return this.placeholder||this.$t("common.select")},displayLabel(){const e=this.options.find(e=>e.value===this.modelValue);return e?e.label:this.resolvedPlaceholder}},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside)},methods:{toggleDropdown(){this.isOpen=!this.isOpen},selectOption(e){this.$emit("update:modelValue",e),this.$emit("change",e),this.isOpen=!1},handleClickOutside(e){this.$el.contains(e.target)||(this.isOpen=!1)}}};const zu=(0,d.A)(Bu,[["render",Wu],["__scopeId","data-v-09c823d4"]]);var Nu=zu;const ju={class:"upload-settings"},Hu={class:"page-header"},qu={class:"first-title"},Xu={class:"header-actions"},Ku={class:"group-header"},Qu={class:"group-title"},Yu={key:0,class:"load-balance-switch"},Gu={class:"switch-label"},Ju={key:0,class:"channel-cards"},Zu=["onMousemove","onMouseleave"],ep={class:"card-header"},tp={class:"card-title"},sp={class:"channel-name"},ip={class:"card-body"},np={class:"card-info"},ap={class:"info-item"},op={class:"info-text"},lp={key:0,class:"info-item"},rp={class:"info-text"},cp={key:1,class:"info-item"},dp=["title"],hp={class:"info-item"},up={class:"info-text"},pp={key:0,class:"info-item"},gp=["title"],fp={class:"info-item"},mp={class:"info-text"},bp={class:"info-item"},yp={class:"info-text"},xp={class:"info-item"},vp={class:"info-text"},kp={class:"info-item"},_p=["title"],wp={key:0,class:"info-item"},Cp=["title"],Sp={key:0,class:"quota-mini"},Fp={class:"quota-text"},Tp={class:"card-actions"},Mp={key:1,class:"empty-tip"},Pp={class:"channel-type-option"},Dp={key:0,class:"form-warning",style:{"margin-top":"0"}},Ap=["innerHTML"],$p={class:"form-warning"},Lp={class:"quota-label"},Vp={class:"quota-status"};function Ep(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Nu,h=K.S2,u=Ou.A,p=Uu.u,f=Iu.qi,m=_.ve,b=Eu.P9,y=Eu.AV,x=$u.xE,k=Vu.WK,S=Lu.lq,F=$u.US,T=w.kZ,M=Au.MF,P=Au.TS,D=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",ju,[(0,i.Lk)("div",Hu,[(0,i.Lk)("h3",qu,[(0,i.eW)((0,n.v_)(e.$t("sysUpload.title"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.titleTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Xu,[(0,i.bF)(d,{modelValue:o.channelFilter,"onUpdate:modelValue":t[0]||(t[0]=e=>o.channelFilter=e),options:l.filterOptions,placeholder:e.$t("sysUpload.filterPlaceholder"),width:"160px"},null,8,["modelValue","options","placeholder"]),(0,i.bF)(h,{type:"primary",onClick:t[1]||(t[1]=e=>o.showAddDialog=!0),class:"add-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"plus",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysUpload.addChannel")),1)]),_:1})])]),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.filteredChannels,s=>((0,i.uX)(),(0,i.CE)("div",{key:s.value,class:"channel-group"},[(0,i.Lk)("div",Ku,[(0,i.Lk)("div",Qu,[(0,i.bF)(u,{type:s.value,class:"group-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,n.v_)(s.label),1),(0,i.bF)(p,{size:"small",type:"info",class:"channel-count"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelList(s.value).length),1)]),_:2},1024)]),l.hasLoadBalance(s.value)?((0,i.uX)(),(0,i.CE)("div",Yu,[(0,i.Lk)("span",Gu,(0,n.v_)(e.$t("sysUpload.loadBalance")),1),(0,i.bF)(f,{modelValue:l.getSettings(s.value).loadBalance.enabled,"onUpdate:modelValue":e=>l.getSettings(s.value).loadBalance.enabled=e,size:"small",onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])])):(0,i.Q3)("",!0)]),l.getChannelList(s.value).length>0?((0,i.uX)(),(0,i.CE)("div",Ju,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.getChannelList(s.value),(a,o)=>((0,i.uX)(),(0,i.CE)("div",{key:a.name||o,class:(0,n.C4)(["channel-card",[s.value,{disabled:!a.enabled,fixed:a.fixed}]]),onMousemove:e=>l.handleCardMouseMove(e,s.value,o),onMouseleave:e=>l.handleCardMouseLeave(s.value,o)},[(0,i.Lk)("div",{class:"card-glow",ref_for:!0,ref:`glow-${s.value}-${o}`},null,512),(0,i.Lk)("div",ep,[(0,i.Lk)("div",tp,[(0,i.Lk)("span",sp,(0,n.v_)(a.name||e.$t("sysUpload.unnamedChannel")),1),a.fixed?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.envVariable")),1)]),_:1})):(0,i.Q3)("",!0)]),(0,i.bF)(f,{modelValue:a.enabled,"onUpdate:modelValue":e=>a.enabled=e,size:"small",onClick:t[2]||(t[2]=(0,C.D$)(()=>{},["stop"])),onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])]),(0,i.Lk)("div",ip,[(0,i.Lk)("div",np,["telegram"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.Lk)("div",ap,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",op,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),a.chatId?((0,i.uX)(),(0,i.CE)("div",lp,[(0,i.bF)(r,{icon:"comments",class:"info-icon"}),(0,i.Lk)("span",rp,"Channel: "+(0,n.v_)(l.maskText(a.chatId)),1)])):(0,i.Q3)("",!0)],64)):"cfr2"===s.value?((0,i.uX)(),(0,i.CE)("div",cp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl||e.$t("sysUpload.notSet")),9,dp)])):"s3"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.Lk)("div",hp,[(0,i.bF)(r,{icon:"server",class:"info-icon"}),(0,i.Lk)("span",up,(0,n.v_)(a.bucketName||e.$t("sysUpload.notSet")),1)]),a.endpoint?((0,i.uX)(),(0,i.CE)("div",pp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.endpoint},(0,n.v_)(a.endpoint),9,gp)])):(0,i.Q3)("",!0)],64)):"discord"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.Lk)("div",fp,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",mp,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),(0,i.Lk)("div",bp,[(0,i.bF)(r,{icon:"hashtag",class:"info-icon"}),(0,i.Lk)("span",yp,"Channel: "+(0,n.v_)(l.maskText(a.channelId)),1)]),a.isNitro?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"success"},{default:(0,i.k6)(()=>[...t[78]||(t[78]=[(0,i.eW)("Nitro",-1)])]),_:1})):(0,i.Q3)("",!0)],64)):"huggingface"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.Lk)("div",xp,[(0,i.bF)(r,{icon:"database",class:"info-icon"}),(0,i.Lk)("span",vp,(0,n.v_)(a.repo||e.$t("sysUpload.notSet")),1)]),a.isPrivate?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo")),1)]),_:1})):(0,i.Q3)("",!0)],64)):"webdav"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.Lk)("div",kp,[(0,i.bF)(r,{icon:"folder",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.baseUrl},(0,n.v_)(a.baseUrl||e.$t("sysUpload.notSet")),9,_p)]),a.publicUrl?((0,i.uX)(),(0,i.CE)("div",wp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl),9,Cp)])):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),a.quota?.enabled?((0,i.uX)(),(0,i.CE)("div",Sp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(a),status:l.getQuotaStatus(a),"stroke-width":6},null,8,["percentage","status"]),(0,i.Lk)("span",Fp,(0,n.v_)(l.getQuotaText(a)),1)])):(0,i.Q3)("",!0)]),(0,i.Lk)("div",Tp,[(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:e=>l.openDetailDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"eye",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.detail")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:e=>l.openEditDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"edit",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"danger",size:"small",onClick:e=>l.deleteChannel(s.value,o),disabled:a.fixed},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"trash-alt",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.deleteBtn")),1)]),_:1},8,["onClick","disabled"])])],42,Zu))),128))])):((0,i.uX)(),(0,i.CE)("div",Mp,[(0,i.bF)(r,{icon:"inbox",class:"empty-icon"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysUpload.noChannels",{type:s.label})),1)]))]))),128)),(0,i.bF)(T,{modelValue:o.showAddDialog,"onUpdate:modelValue":t[35]||(t[35]=e=>o.showAddDialog=e),title:e.$t("sysUpload.addDialogTitle"),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetAddForm},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[34]||(t[34]=e=>o.showAddDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cancel")),1)]),_:1}),"cfr2"!==o.newChannel.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,type:"primary",onClick:l.confirmAddChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.confirmAdd")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.newChannel,"label-position":"top",ref:"addForm",rules:l.addRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{label:e.$t("sysUpload.channelTypeLabel"),prop:"type"},{default:(0,i.k6)(()=>[(0,i.bF)(y,{modelValue:o.newChannel.type,"onUpdate:modelValue":t[3]||(t[3]=e=>o.newChannel.type=e),placeholder:e.$t("sysUpload.channelTypePlaceholder"),style:{width:"100%"},onChange:l.onChannelTypeChange},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.addableChannels,e=>((0,i.uX)(),(0,i.Wv)(b,{key:e.value,label:e.label,value:e.value},{default:(0,i.k6)(()=>[(0,i.Lk)("span",Pp,[(0,i.bF)(u,{type:e.value,class:"select-option-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,n.v_)(e.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","onChange"])]),_:1},8,["label"]),"cfr2"===o.newChannel.type?((0,i.uX)(),(0,i.CE)("div",Dp,[(0,i.bF)(r,{icon:"info-circle",style:{"margin-right":"6px"}}),(0,i.Lk)("span",{innerHTML:e.$t("sysUpload.r2ConfigNote")},null,8,Ap)])):((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.channelNameImmutableTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.name,"onUpdate:modelValue":t[4]||(t[4]=e=>o.newChannel.name=e),placeholder:e.$t("sysUpload.channelNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),"telegram"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":t[5]||(t[5]=e=>o.newChannel.botToken=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.chatId,"onUpdate:modelValue":t[6]||(t[6]=e=>o.newChannel.chatId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.chatIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>o.newChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"s3"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:e.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.endpoint,"onUpdate:modelValue":t[8]||(t[8]=e=>o.newChannel.endpoint=e),placeholder:e.$t("sysUpload.endpointPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.cdnDomain,"onUpdate:modelValue":t[9]||(t[9]=e=>o.newChannel.cdnDomain=e),placeholder:e.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.bucketName,"onUpdate:modelValue":t[10]||(t[10]=e=>o.newChannel.bucketName=e),placeholder:e.$t("sysUpload.bucketNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.region,"onUpdate:modelValue":t[11]||(t[11]=e=>o.newChannel.region=e),placeholder:e.$t("sysUpload.bucketRegionPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.accessKeyId,"onUpdate:modelValue":t[12]||(t[12]=e=>o.newChannel.accessKeyId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.accessKeyIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.secretAccessKey,"onUpdate:modelValue":t[13]||(t[13]=e=>o.newChannel.secretAccessKey=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.secretAccessKeyPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.pathStyle,"onUpdate:modelValue":t[14]||(t[14]=e=>o.newChannel.pathStyle=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":t[15]||(t[15]=e=>o.newChannel.quota.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":t[16]||(t[16]=e=>o.newChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":t[17]||(t[17]=e=>o.newChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":t[18]||(t[18]=e=>o.newChannel.botToken=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.channelId,"onUpdate:modelValue":t[19]||(t[19]=e=>o.newChannel.channelId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.channelIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":t[20]||(t[20]=e=>o.newChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isNitro,"onUpdate:modelValue":t[21]||(t[21]=e=>o.newChannel.isNitro=e)},null,8,["modelValue"])]),_:1}),(0,i.Lk)("div",$p,[(0,i.bF)(r,{icon:"exclamation-triangle",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysUpload.discordWarning")),1)])],64)):"huggingface"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:e.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.repo,"onUpdate:modelValue":t[22]||(t[22]=e=>o.newChannel.repo=e),placeholder:e.$t("sysUpload.repoNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.token,"onUpdate:modelValue":t[23]||(t[23]=e=>o.newChannel.token=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.accessTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isPrivate,"onUpdate:modelValue":t[24]||(t[24]=e=>o.newChannel.isPrivate=e)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:e.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.baseUrl,"onUpdate:modelValue":t[25]||(t[25]=e=>o.newChannel.baseUrl=e),placeholder:e.$t("sysUpload.webdavBaseUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.username,"onUpdate:modelValue":t[26]||(t[26]=e=>o.newChannel.username=e),placeholder:e.$t("sysUpload.webdavUsernamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.password,"onUpdate:modelValue":t[27]||(t[27]=e=>o.newChannel.password=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.webdavPasswordPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.publicUrl,"onUpdate:modelValue":t[28]||(t[28]=e=>o.newChannel.publicUrl=e),placeholder:e.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.headersText,"onUpdate:modelValue":t[29]||(t[29]=e=>o.newChannel.headersText=e),type:"textarea",autosize:{minRows:2},placeholder:e.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.createDirectory,"onUpdate:modelValue":t[30]||(t[30]=e=>o.newChannel.createDirectory=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":t[31]||(t[31]=e=>o.newChannel.quota.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":t[32]||(t[32]=e=>o.newChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":t[33]||(t[33]=e=>o.newChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)],64))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showDetailDialog,"onUpdate:modelValue":t[37]||(t[37]=e=>o.showDetailDialog=e),title:e.$t("sysUpload.detailDialogTitle",{name:o.currentChannel?.name||""}),class:"channel-dialog",onClosed:l.resetDetailData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[36]||(t[36]=e=>o.showDetailDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.closeBtn")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.openEditFromDetail},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(P,{column:1,border:""},{default:(0,i.k6)(()=>[(0,i.bF)(M,{label:e.$t("sysUpload.channelNameDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.name),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.channelTypeDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelTypeLabel(o.currentChannelType)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.statusLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:o.currentChannel?.enabled?"success":"info"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.enabled?e.$t("sysUpload.enabled"):e.$t("sysUpload.disabled")),1)]),_:1},8,["type"])]),_:1},8,["label"]),o.currentChannel?.fixed?((0,i.uX)(),(0,i.Wv)(M,{key:0,label:e.$t("sysUpload.configSource")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.envVariable")),1)]),_:1})]),_:1},8,["label"])):(0,i.Q3)("",!0),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(M,{label:e.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.chatIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.chatId,6)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.Wv)(M,{key:2,label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.publicUrl||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"])):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(M,{label:e.$t("sysUpload.endpointLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.endpoint,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.cdnDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.cdnDomain||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.bucketName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.bucketName),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.bucketRegion")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.region),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.pathStyle")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.pathStyle?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(M,{label:e.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.channelIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.channelId,6)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.nitroMember")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isNitro?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(M,{label:e.$t("sysUpload.repoName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.repo),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.privateRepo")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isPrivate?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:6},[(0,i.bF)(M,{label:e.$t("sysUpload.webdavBaseUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.baseUrl,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.publicUrl||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.username||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":l.formatHeaders(o.currentChannel?.headers),type:"textarea",autosize:{minRows:2},readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavCreateDirectory")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(!1!==o.currentChannel?.createDirectory?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):(0,i.Q3)("",!0),o.currentChannel?.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:7},[(0,i.bF)(M,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.limitGB)+" GB",1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.threshold)+"%",1)]),_:1},8,["label"]),(0,i.bF)(M,null,{label:(0,i.k6)(()=>[(0,i.Lk)("span",Lp,[(0,i.eW)((0,n.v_)(e.$t("sysUpload.currentUsage"))+" ",1),(0,i.bF)(h,{link:"",type:"primary",onClick:l.refreshQuota,class:"refresh-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt",class:(0,n.C4)({"fa-spin":o.quotaLoading})},null,8,["class"])]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",Vp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(o.currentChannel),status:l.getQuotaStatus(o.currentChannel),"stroke-width":16,"text-inside":!0,format:()=>l.getQuotaText(o.currentChannel)},null,8,["percentage","status","format"]),(0,i.Lk)("div",{class:(0,n.C4)(["quota-info",{"quota-warning":l.isQuotaExceeded(o.currentChannel)}])},(0,n.v_)(l.getQuotaStatusText(o.currentChannel)),3)])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showEditDialog,"onUpdate:modelValue":t[77]||(t[77]=e=>o.showEditDialog=e),title:e.$t("sysUpload.editDialogTitle",{name:o.editChannel?.name||""}),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetEditData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[76]||(t[76]=e=>o.showEditDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cancel")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.confirmEditChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.saveChanges")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.editChannel,"label-position":"top",ref:"editForm",rules:l.editRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.channelNameEditDisabledTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.name,"onUpdate:modelValue":t[38]||(t[38]=e=>o.editChannel.name=e),disabled:""},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.enableChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.enabled,"onUpdate:modelValue":t[39]||(t[39]=e=>o.editChannel.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":t[40]||(t[40]=e=>o.editChannel.botToken=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.chatId,"onUpdate:modelValue":t[41]||(t[41]=e=>o.editChannel.chatId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":t[42]||(t[42]=e=>o.editChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":t[43]||(t[43]=e=>o.editChannel.publicUrl=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[44]||(t[44]=e=>o.editChannel.quota.enabled=e),onChange:t[45]||(t[45]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[46]||(t[46]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[47]||(t[47]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:e.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.endpoint,"onUpdate:modelValue":t[48]||(t[48]=e=>o.editChannel.endpoint=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.cdnDomain,"onUpdate:modelValue":t[49]||(t[49]=e=>o.editChannel.cdnDomain=e),placeholder:e.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.bucketName,"onUpdate:modelValue":t[50]||(t[50]=e=>o.editChannel.bucketName=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.region,"onUpdate:modelValue":t[51]||(t[51]=e=>o.editChannel.region=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.accessKeyId,"onUpdate:modelValue":t[52]||(t[52]=e=>o.editChannel.accessKeyId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.secretAccessKey,"onUpdate:modelValue":t[53]||(t[53]=e=>o.editChannel.secretAccessKey=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.pathStyle,"onUpdate:modelValue":t[54]||(t[54]=e=>o.editChannel.pathStyle=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[55]||(t[55]=e=>o.editChannel.quota.enabled=e),onChange:t[56]||(t[56]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[57]||(t[57]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[58]||(t[58]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":t[59]||(t[59]=e=>o.editChannel.botToken=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.channelId,"onUpdate:modelValue":t[60]||(t[60]=e=>o.editChannel.channelId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":t[61]||(t[61]=e=>o.editChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isNitro,"onUpdate:modelValue":t[62]||(t[62]=e=>o.editChannel.isNitro=e)},null,8,["modelValue"])]),_:1})],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:e.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.repo,"onUpdate:modelValue":t[63]||(t[63]=e=>o.editChannel.repo=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.token,"onUpdate:modelValue":t[64]||(t[64]=e=>o.editChannel.token=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isPrivate,"onUpdate:modelValue":t[65]||(t[65]=e=>o.editChannel.isPrivate=e)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(x,{label:e.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.baseUrl,"onUpdate:modelValue":t[66]||(t[66]=e=>o.editChannel.baseUrl=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.username,"onUpdate:modelValue":t[67]||(t[67]=e=>o.editChannel.username=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.password,"onUpdate:modelValue":t[68]||(t[68]=e=>o.editChannel.password=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":t[69]||(t[69]=e=>o.editChannel.publicUrl=e),placeholder:e.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.headersText,"onUpdate:modelValue":t[70]||(t[70]=e=>o.editChannel.headersText=e),type:"textarea",autosize:{minRows:2},placeholder:e.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.createDirectory,"onUpdate:modelValue":t[71]||(t[71]=e=>o.editChannel.createDirectory=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[72]||(t[72]=e=>o.editChannel.quota.enabled=e),onChange:t[73]||(t[73]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[74]||(t[74]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[75]||(t[75]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"])])),[[D,o.loading]])}var Ip={components:{ChannelIcon:Ou.A,CustomSelect:Nu},data(){return{channelFilter:"",channels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],addableChannels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],telegramSettings:{loadBalance:{enabled:!1},channels:[]},cfr2Settings:{channels:[]},s3Settings:{loadBalance:{enabled:!1},channels:[]},discordSettings:{loadBalance:{enabled:!1},channels:[]},huggingfaceSettings:{loadBalance:{enabled:!1},channels:[]},webdavSettings:{loadBalance:{enabled:!1},channels:[]},showAddDialog:!1,showDetailDialog:!1,showEditDialog:!1,currentChannelType:"",currentChannelIndex:-1,currentChannel:null,editChannel:{},newChannel:{type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0},quotaStats:{},quotaLoading:!1,loading:!1}},computed:{filterOptions(){return[{value:"",label:this.$t("common.all")},...this.channels.map(e=>({value:e.value,label:e.label,channelType:e.value}))]},filteredChannels(){return this.channelFilter?this.channels.filter(e=>e.value===this.channelFilter):this.channels},addRules(){return{type:[{required:!0,message:this.$t("sysUpload.channelTypePlaceholder"),trigger:"change"}],name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}},editRules(){return{name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}}},methods:{handleCardMouseMove(e,t,s){const i=e.currentTarget,n=i.getBoundingClientRect(),a=e.clientX-n.left,o=e.clientY-n.top,l=`glow-${t}-${s}`,r=this.$refs[l];r&&r[0]&&(r[0].style.opacity="1",r[0].style.left=`${a}px`,r[0].style.top=`${o}px`)},handleCardMouseLeave(e,t){const s=`glow-${e}-${t}`,i=this.$refs[s];i&&i[0]&&(i[0].style.opacity="0")},getChannelTypeLabel(e){const t=this.channels.find(t=>t.value===e);return t?t.label:e},getChannelList(e){return this.getSettings(e)?.channels||[]},getSettings(e){const t={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};return t[e]},hasLoadBalance(e){return["telegram","s3","discord","huggingface","webdav"].includes(e)},maskText(e,t=4){return e?e.length<=2*t?"****":e.slice(0,t)+"****"+e.slice(-t):this.$t("sysUpload.notSet")},formatHeaders(e){return!e||"object"===typeof e&&0===Object.keys(e).length?this.$t("sysUpload.notSet"):"string"===typeof e?e:JSON.stringify(e,null,2)},headersToText(e){return e?"string"===typeof e?e:JSON.stringify(e,null,2):""},parseHeadersText(e){if(!e||!e.trim())return{};try{const t=JSON.parse(e);return!t||"object"!==typeof t||Array.isArray(t)?null:t}catch(t){return null}},openDetailDialog(e,t){this.currentChannelType=e,this.currentChannelIndex=t,this.currentChannel=this.getChannelList(e)[t],this.showDetailDialog=!0},openEditDialog(e,t){this.currentChannelType=e,this.currentChannelIndex=t;const s=this.getChannelList(e)[t];this.editChannel=JSON.parse(JSON.stringify(s)),"webdav"===e&&(this.editChannel.headersText=this.headersToText(this.editChannel.headers),this.editChannel.createDirectory=!1!==this.editChannel.createDirectory),this.editChannel.quota||(this.editChannel.quota={enabled:!1,limitGB:10,threshold:95}),this.showEditDialog=!0},openEditFromDetail(){this.showDetailDialog=!1,this.openEditDialog(this.currentChannelType,this.currentChannelIndex)},resetAddForm(){this.newChannel={type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},resetDetailData(){this.currentChannel=null},resetEditData(){this.editChannel={}},onChannelTypeChange(){const{type:e,name:t}=this.newChannel;this.newChannel={type:e,name:t,enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},confirmAddChannel(){this.$refs.addForm.validate(e=>{if(!e)return;const{type:t,name:s}=this.newChannel,i=this.getSettings(t),n=["Telegram_env","R2_env","S3_env","Discord_env","HuggingFace_env","WebDAV_env"];if(n.includes(s))return void this.$message.warning(this.$t("sysUpload.reservedName"));const a=i.channels.some(e=>e.name===s);if(a)return void this.$message.warning(this.$t("sysUpload.duplicateName"));let o={id:i.channels.length+1,name:this.newChannel.name,type:t,savePath:"database",enabled:!0,fixed:!1};if("telegram"===t)Object.assign(o,{botToken:this.newChannel.botToken,chatId:this.newChannel.chatId,proxyUrl:this.newChannel.proxyUrl});else if("s3"===t)Object.assign(o,{endpoint:this.newChannel.endpoint,cdnDomain:this.newChannel.cdnDomain,bucketName:this.newChannel.bucketName,region:this.newChannel.region,accessKeyId:this.newChannel.accessKeyId,secretAccessKey:this.newChannel.secretAccessKey,pathStyle:this.newChannel.pathStyle,quota:{...this.newChannel.quota}});else if("discord"===t)Object.assign(o,{botToken:this.newChannel.botToken,channelId:this.newChannel.channelId,proxyUrl:this.newChannel.proxyUrl,isNitro:this.newChannel.isNitro});else if("huggingface"===t)Object.assign(o,{repo:this.newChannel.repo,token:this.newChannel.token,isPrivate:this.newChannel.isPrivate});else if("webdav"===t){const e=this.parseHeadersText(this.newChannel.headersText);if(null===e)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));Object.assign(o,{baseUrl:this.newChannel.baseUrl,username:this.newChannel.username,password:this.newChannel.password,publicUrl:this.newChannel.publicUrl,headers:e,createDirectory:!1!==this.newChannel.createDirectory,quota:{...this.newChannel.quota}})}i.channels.push(o),this.showAddDialog=!1,this.saveSettings()})},confirmEditChannel(){this.$refs.editForm.validate(e=>{if(!e)return;const t=this.getSettings(this.currentChannelType),s=this.currentChannelIndex,i=t.channels[s]?.name||this.editChannel.name,n={...this.editChannel,name:i};if("webdav"===this.currentChannelType){const e=this.parseHeadersText(n.headersText);if(null===e)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));n.headers=e,n.createDirectory=!1!==n.createDirectory,delete n.headersText}t.channels[this.currentChannelIndex]=n,this.showEditDialog=!1,this.saveSettings()})},deleteChannel(e,t){const s=this.getChannelList(e)[t];s.fixed?this.$message.warning(this.$t("sysUpload.fixedChannelCannotDelete")):this.$confirm(this.$t("sysUpload.deleteChannelConfirm"),this.$t("common.warning"),{confirmButtonText:this.$t("common.confirm"),cancelButtonText:this.$t("common.cancel"),type:"warning"}).then(()=>{const s=this.getSettings(e);s.channels.splice(t,1),s.channels.forEach((e,t)=>{e.id=t+1}),this.saveSettings()}).catch(()=>{})},saveSettings(){const e={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};(0,Rt.A)("/api/manage/sysConfig/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(()=>{this.$message.success(this.$t("sysOthers.settingsSaved"))})},async refreshQuota(){this.quotaLoading=!0;try{const e=await(0,Rt.A)("/api/manage/quota",{method:"POST"}),t=await e.json();if(t.success)this.quotaStats=t.channelStats||{};else{const e=await(0,Rt.A)("/api/manage/quota"),t=await e.json();t.success&&(this.quotaStats=t.quotaStats||{})}}catch(e){console.error("Failed to refresh quota stats:",e)}finally{this.quotaLoading=!1}},async loadQuotaStats(){try{const e=await(0,Rt.A)("/api/manage/quota"),t=await e.json();t.success&&(this.quotaStats=t.quotaStats||{})}catch(e){console.error("Failed to load quota stats:",e)}},getChannelUsedGB(e){const t=this.quotaStats[e.name];return t?(t.usedMB||0)/1024:0},getQuotaPercentage(e){const t=this.getChannelUsedGB(e),s=e.quota?.limitGB||10,i=t/s*100;return Math.min(100,Math.round(10*i)/10)},getQuotaStatus(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s?"exception":t>=80?"warning":"success"},getQuotaText(e){const t=this.getChannelUsedGB(e),s=e.quota?.limitGB||10;return`${t.toFixed(2)} / ${s} GB`},isQuotaExceeded(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s},getQuotaStatusText(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s?`⚠️ 已达到容量阈值 (${s}%),渠道写入已暂停`:t>=80?"⚡ 容量使用较高,接近阈值":"✓ 容量正常"},async onQuotaEnabledChange(e,t){if(e&&t.name){const e=this.quotaStats[t.name];e||this.$confirm(this.$t("sysUpload.quotaInitConfirm"),this.$t("sysUpload.quotaInitTitle"),{confirmButtonText:this.$t("sysUpload.quotaInitConfirmBtn"),cancelButtonText:this.$t("sysUpload.quotaInitCancelBtn"),type:"info"}).then(async()=>{await this.recalculateQuota()}).catch(()=>{this.$message.info(this.$t("sysUpload.quotaInitLater"))})}},async recalculateQuota(){this.quotaLoading=!0;try{this.$message.info(this.$t("sysUpload.quotaCalculating"));const e=await(0,Rt.A)("/api/manage/quota",{method:"POST"}),t=await e.json();t.success?(this.quotaStats=t.channelStats||{},this.$message.success(this.$t("sysUpload.quotaCalculateSuccess"))):this.$message.error(this.$t("sysUpload.quotaCalculateError")+(t.error||""))}catch(e){console.error("Failed to recalculate quota:",e),this.$message.error(this.$t("sysUpload.quotaCalculateFailed"))}finally{this.quotaLoading=!1}}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/upload").then(e=>e.json()).then(e=>{this.telegramSettings=e.telegram,e.cfr2&&e.cfr2.channels&&(e.cfr2.channels=e.cfr2.channels.map(e=>({...e,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.cfr2Settings=e.cfr2,e.s3&&e.s3.channels&&(e.s3.channels=e.s3.channels.map(e=>({...e,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.s3Settings=e.s3,e.discord&&e.discord.channels&&(e.discord.channels=e.discord.channels.map(e=>({...e,proxyUrl:e.proxyUrl||""}))),this.discordSettings=e.discord||{loadBalance:{},channels:[]},e.huggingface&&e.huggingface.channels&&(e.huggingface.channels=e.huggingface.channels.map(e=>({...e,isPrivate:e.isPrivate||!1}))),this.huggingfaceSettings=e.huggingface||{loadBalance:{},channels:[]},e.webdav&&e.webdav.channels&&(e.webdav.channels=e.webdav.channels.map(e=>({...e,username:e.username||"",password:e.password||"",publicUrl:e.publicUrl||"",headers:e.headers||{},createDirectory:!1!==e.createDirectory,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.webdavSettings=e.webdav||{loadBalance:{},channels:[]},this.loadQuotaStats()}).finally(()=>{this.loading=!1})}};const Up=(0,d.A)(Ip,[["render",Ep],["__scopeId","data-v-0082a519"]]);var Op=Up,Rp=s(98469);s(49187);const Wp={class:"save-text"};function Bp(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.Wv)(C.eB,{name:"fade-up"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:(0,n.C4)(["floating-save-btn",{"is-loading":s.loading}]),onClick:t[0]||(t[0]=(...e)=>l.handleClick&&l.handleClick(...e))},[s.loading?((0,i.uX)(),(0,i.Wv)(r,{key:0,icon:"spinner",spin:""})):((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:"save"})),(0,i.Lk)("span",Wp,(0,n.v_)(s.loading?e.$t("floatingSave.saving"):e.$t("floatingSave.save")),1)],2),[[C.aG,o.visible]])]),_:1})}var zp={name:"FloatingSaveButton",emits:["click"],props:{loading:{type:Boolean,default:!1},show:{type:Boolean,default:!0}},data(){return{visible:!1}},watch:{show:{immediate:!0,handler(e){e?setTimeout(()=>{this.visible=!0},600):this.visible=!1}}},methods:{handleClick(){this.loading||this.$emit("click")}}};const Np=(0,d.A)(zp,[["render",Bp],["__scopeId","data-v-9cef95d2"]]);var jp=Np,Hp=s(84757);s(5802),s(64752),s(38736);const qp={class:"security-settings"},Xp={class:"first-settings"},Kp={class:"first-title"},Qp={class:"second-title"},Yp={style:{display:"flex",gap:"8px",width:"100%"}},Gp={class:"second-title"},Jp={style:{display:"flex",gap:"8px",width:"100%"}},Zp={class:"second-title token-title"},eg={class:"token-actions"},tg={class:"token-table-container"},sg={class:"table-cell-content"},ig={class:"table-cell-content"},ng={class:"token-display"},ag={class:"table-cell-content"},og={class:"table-cell-content"},lg={class:"table-cell-content"},rg={class:"table-cell-content"},cg={class:"table-cell-content action-buttons"},dg={class:"first-settings"},hg={class:"first-title"},ug={class:"second-title"},pg={class:"second-title"},gg={class:"query-param-list"},fg={class:"query-param-list"},mg={class:"first-settings"},bg={class:"first-title"},yg={class:"second-title"},xg={class:"second-title"},vg={class:"second-title"},kg={class:"second-title"},_g={class:"form-item-hint"},wg={class:"form-item-hint"},Cg={style:{display:"flex",gap:"10px",width:"100%"}},Sg={class:"dialog-footer"},Fg={style:{display:"flex",gap:"10px",width:"100%"}},Tg={class:"dialog-footer"},Mg={class:"token-result"},Pg={style:{"margin-bottom":"15px",color:"#e6a23c"}},Dg={class:"dialog-footer"};function Ag(e,t,s,a,o,l){const r=Vu.WK,c=Rp.dI,d=$u.xE,h=$u.US,u=(0,i.g2)("font-awesome-icon"),p=K.S2,f=Hp.o8,m=Uu.u,b=Hp.Up,y=g.R7,x=Iu.qi,k=Eu.P9,_=Eu.AV,S=Lu.lq,F=jp,T=Rp.o5,M=w.kZ,P=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",qp,[(0,i.Lk)("div",Xp,[(0,i.Lk)("h3",Kp,(0,n.v_)(e.$t("sysSecurity.authManagement")),1),(0,i.Lk)("h4",Qp,(0,n.v_)(e.$t("sysSecurity.userAuth")),1),(0,i.bF)(h,{model:o.authSettings.user,rules:l.userPassRules,ref:"userPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.uploadPassword"),prop:"authCode"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Yp,[(0,i.bF)(r,{modelValue:o.authSettings.user.authCode,"onUpdate:modelValue":t[0]||(t[0]=e=>o.authSettings.user.authCode=e),type:"password","show-password":"",onInput:l.handleUserPassInput,autocomplete:"new-password",placeholder:o.authSettings.user._hasPassword?e.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearUserPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.user._hasPassword?((0,i.uX)(),(0,i.Wv)(c,{key:0,modelValue:o.clearUserPassword,"onUpdate:modelValue":t[1]||(t[1]=e=>o.clearUserPassword=e),onChange:l.handleClearUserPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showUserPassConfirm?((0,i.uX)(),(0,i.Wv)(d,{label:e.$t("sysSecurity.confirmPassword"),prop:"confirmNewUserPassword",key:"user-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.user.confirmNewUserPassword,"onUpdate:modelValue":t[2]||(t[2]=e=>o.authSettings.user.confirmNewUserPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Gp,(0,n.v_)(e.$t("sysSecurity.adminAuth")),1),(0,i.bF)(h,{model:o.authSettings.admin,rules:l.adminPassRules,ref:"adminPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.adminUsername"),prop:"adminUsername"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminUsername,"onUpdate:modelValue":t[3]||(t[3]=e=>o.authSettings.admin.adminUsername=e),autocomplete:"new-password",disabled:o.clearAdminPassword},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.adminPassword"),prop:"adminPassword"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Jp,[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminPassword,"onUpdate:modelValue":t[4]||(t[4]=e=>o.authSettings.admin.adminPassword=e),type:"password","show-password":"",onInput:l.handleAdminPassInput,autocomplete:"new-password",placeholder:o.authSettings.admin._hasPassword?e.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearAdminPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.admin._hasPassword?((0,i.uX)(),(0,i.Wv)(c,{key:0,modelValue:o.clearAdminPassword,"onUpdate:modelValue":t[5]||(t[5]=e=>o.clearAdminPassword=e),onChange:l.handleClearAdminPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showAdminPassConfirm?((0,i.uX)(),(0,i.Wv)(d,{label:e.$t("sysSecurity.confirmPassword"),prop:"confirmNewAdminPassword",key:"admin-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.confirmNewAdminPassword,"onUpdate:modelValue":t[6]||(t[6]=e=>o.authSettings.admin.confirmNewAdminPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Zp,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.apiTokenManagement"))+" ",1),(0,i.Lk)("a",eg,[(0,i.bF)(p,{type:"primary",size:"small",onClick:t[7]||(t[7]=e=>o.showCreateTokenDialog=!0),circle:""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"})]),_:1})])]),(0,i.Lk)("div",tg,[(0,i.bo)(((0,i.uX)(),(0,i.Wv)(b,{data:o.apiTokens,class:"token-table"},{default:(0,i.k6)(()=>[(0,i.bF)(f,{prop:"name",label:e.$t("sysSecurity.tokenName"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",sg,(0,n.v_)(e.row.name),1)]),_:1},8,["label"]),(0,i.bF)(f,{prop:"token",label:e.$t("sysSecurity.tokenValue"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",ig,[(0,i.Lk)("span",ng,(0,n.v_)(e.row.token),1)])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"permissions",label:e.$t("sysSecurity.permissions"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",ag,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.row.permissions,e=>((0,i.uX)(),(0,i.Wv)(m,{key:e,size:"small",class:"permission-tag"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getPermissionText(e)),1)]),_:2},1024))),128))])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"createdAt",label:e.$t("sysSecurity.createdAt"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",og,(0,n.v_)(l.formatDate(e.row.createdAt)),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.status"),"header-align":"center",width:"90"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",lg,[(0,i.bF)(m,{type:"active"===l.getTokenStatus(e.row.expiresAt).status?"success":"danger",size:"small"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getTokenStatus(e.row.expiresAt).label),1)]),_:2},1032,["type"])])]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.expiresAt"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",rg,(0,n.v_)(l.getTokenStatus(e.row.expiresAt).expiresText),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.operation"),fixed:"right","header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",cg,[(0,i.bF)(p,{class:"action-button",size:"small",onClick:e=>l.editToken(t.row)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(p,{class:"action-button",size:"small",type:"danger",onClick:e=>l.deleteToken(t.row.id)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.deleteBtn")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])),[[P,o.tokenLoading]])])]),(0,i.Lk)("div",dg,[(0,i.Lk)("h3",hg,(0,n.v_)(e.$t("sysSecurity.uploadManagement")),1),(0,i.Lk)("h4",ug,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.imageReview"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.imageReviewTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.moderate,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.enableReview")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.moderate.enabled,"onUpdate:modelValue":t[8]||(t[8]=e=>o.uploadSettings.moderate.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.reviewChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.uploadSettings.moderate.channel,"onUpdate:modelValue":t[9]||(t[9]=e=>o.uploadSettings.moderate.channel=e),placeholder:e.$t("sysSecurity.reviewChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{label:"moderatecontent.com",value:"moderatecontent.com"}),(0,i.bF)(k,{label:"nsfwjs",value:"nsfwjs"})]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"moderatecontent.com"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.apiKey")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.moderateContentApiKey,"onUpdate:modelValue":t[10]||(t[10]=e=>o.uploadSettings.moderate.moderateContentApiKey=e)},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0),"nsfwjs"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.nsfwApiPath,"onUpdate:modelValue":t[11]||(t[11]=e=>o.uploadSettings.moderate.nsfwApiPath=e),placeholder:"https://nsfwjs.your.domain"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"]),(0,i.Lk)("h4",pg,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.ipQuery"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.ipQueryTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.ipQuery,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.enableIpQuery")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.ipQuery.enabled,"onUpdate:modelValue":t[12]||(t[12]=e=>o.uploadSettings.ipQuery.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.ipQueryChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.uploadSettings.ipQuery.channel,"onUpdate:modelValue":t[13]||(t[13]=e=>o.uploadSettings.ipQuery.channel=e),placeholder:e.$t("sysSecurity.ipQueryChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{label:e.$t("sysSecurity.customApi"),value:"customApi"},null,8,["label"])]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"customApi"===o.uploadSettings.ipQuery.channel?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(d,{label:e.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.url,"onUpdate:modelValue":t[14]||(t[14]=e=>o.uploadSettings.ipQuery.customApi.url=e),placeholder:"https://api.example.com/ip"},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.queryParams")},{default:(0,i.k6)(()=>[(0,i.Lk)("div",gg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.params,(t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"query-param-row"},[(0,i.bF)(r,{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:e.$t("sysSecurity.paramNamePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(r,{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:e.$t("sysSecurity.paramValuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:e=>l.removeIpQueryParam(s),disabled:o.uploadSettings.ipQuery.customApi.params.length<=1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick","disabled"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryParam},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysSecurity.addQueryParam")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"]),(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.responseFields"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.responseFieldsTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",fg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.responseFields,(t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"response-field-row"},[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.responseFields[s],"onUpdate:modelValue":e=>o.uploadSettings.ipQuery.customApi.responseFields[s]=e,placeholder:e.$t("sysSecurity.responseFieldPathPlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{plain:"",circle:"",onClick:e=>l.moveIpQueryResponseField(s,-1),disabled:0===s},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-up"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{plain:"",circle:"",onClick:e=>l.moveIpQueryResponseField(s,1),disabled:s===o.uploadSettings.ipQuery.customApi.responseFields.length-1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-down"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:e=>l.removeIpQueryResponseField(s)},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryResponseField},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysSecurity.addResponseField")),1)]),_:1},8,["onClick"])])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.Lk)("div",mg,[(0,i.Lk)("h3",bg,(0,n.v_)(e.$t("sysSecurity.accessManagement")),1),(0,i.Lk)("h4",yg,(0,n.v_)(e.$t("sysSecurity.domainFilter")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.allowedDomains"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.allowedDomainsTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.accessSettings.allowedDomains,"onUpdate:modelValue":t[15]||(t[15]=e=>o.accessSettings.allowedDomains=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h4",xg,(0,n.v_)(e.$t("sysSecurity.whiteListMode")),1),(0,i.bF)(h,{model:o.accessSettings,rules:l.accessRules,ref:"accessForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.enableWhiteList"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.enableWhiteListTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.whiteListMode,"onUpdate:modelValue":t[16]||(t[16]=e=>o.accessSettings.whiteListMode=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",vg,(0,n.v_)(e.$t("sysSecurity.imageTransform")),1),(0,i.bF)(h,{model:o.accessSettings,rules:l.accessRules,ref:"imageTransformForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.enableImageTransform"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.enableImageTransformTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.imageTransformEnabled,"onUpdate:modelValue":t[17]||(t[17]=e=>o.accessSettings.imageTransformEnabled=e)},null,8,["modelValue"])]),_:1}),o.accessSettings.imageTransformEnabled?((0,i.uX)(),(0,i.Wv)(d,{key:0,prop:"imageTransformAllowedSizes"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.imageTransformAllowedSizes"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.imageTransformAllowedSizesHint"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.accessSettings.imageTransformAllowedSizes,"onUpdate:modelValue":t[18]||(t[18]=e=>o.accessSettings.imageTransformAllowedSizes=e),placeholder:e.$t("sysSecurity.imageTransformAllowedSizesPlaceholder")},null,8,["modelValue","placeholder"])]),_:1})):(0,i.Q3)("",!0)]),_:1},8,["model","rules"]),(0,i.Lk)("h4",kg,(0,n.v_)(e.$t("sysSecurity.sessionSecurityPolicy")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.secureMode"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.secureModeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.sessionSecure,"onUpdate:modelValue":t[19]||(t[19]=e=>o.accessSettings.sessionSecure=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(d,{label:e.$t("sysSecurity.userSessionMaxAge"),prop:"userSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.userSessionMaxAge,"onUpdate:modelValue":t[20]||(t[20]=e=>o.accessSettings.userSessionMaxAge=e),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",_g,(0,n.v_)(e.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.adminSessionMaxAge"),prop:"adminSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.adminSessionMaxAge,"onUpdate:modelValue":t[21]||(t[21]=e=>o.accessSettings.adminSessionMaxAge=e),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",wg,(0,n.v_)(e.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"])]),_:1},8,["model"])]),(0,i.bF)(F,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"]),(0,i.bF)(M,{modelValue:o.showCreateTokenDialog,"onUpdate:modelValue":t[29]||(t[29]=e=>o.showCreateTokenDialog=e),title:e.$t("sysSecurity.createTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Sg,[(0,i.bF)(p,{onClick:t[28]||(t[28]=e=>o.showCreateTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.createToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.createBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.newToken,rules:l.tokenRules,ref:"tokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel"),prop:"name"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.newToken.name,"onUpdate:modelValue":t[22]||(t[22]=e=>o.newToken.name=e),placeholder:e.$t("sysSecurity.tokenNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.newToken.permissions,"onUpdate:modelValue":t[23]||(t[23]=e=>o.newToken.permissions=e)},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(c,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(c,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(c,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.neverExpire,"onUpdate:modelValue":t[24]||(t[24]=e=>o.newToken.neverExpire=e),onChange:l.onCreateNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Cg,[(0,i.bF)(S,{modelValue:o.newToken.expirationValue,"onUpdate:modelValue":t[25]||(t[25]=e=>o.newToken.expirationValue=e),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(_,{modelValue:o.newToken.expirationUnit,"onUpdate:modelValue":t[26]||(t[26]=e=>o.newToken.expirationUnit=e),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,t=>((0,i.uX)(),(0,i.Wv)(k,{key:t.value,label:e.$t(t.labelKey),value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.autoDelete,"onUpdate:modelValue":t[27]||(t[27]=e=>o.newToken.autoDelete=e)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(M,{modelValue:o.showEditTokenDialog,"onUpdate:modelValue":t[37]||(t[37]=e=>o.showEditTokenDialog=e),title:e.$t("sysSecurity.editTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Tg,[(0,i.bF)(p,{onClick:t[36]||(t[36]=e=>o.showEditTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.updateToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.updateBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.editingToken,rules:l.editTokenRules,ref:"editTokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.editingToken.name,"onUpdate:modelValue":t[30]||(t[30]=e=>o.editingToken.name=e),disabled:""},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.editingToken.permissions,"onUpdate:modelValue":t[31]||(t[31]=e=>o.editingToken.permissions=e)},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(c,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(c,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(c,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.neverExpire,"onUpdate:modelValue":t[32]||(t[32]=e=>o.editingToken.neverExpire=e),onChange:l.onEditNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Fg,[(0,i.bF)(S,{modelValue:o.editingToken.expirationValue,"onUpdate:modelValue":t[33]||(t[33]=e=>o.editingToken.expirationValue=e),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(_,{modelValue:o.editingToken.expirationUnit,"onUpdate:modelValue":t[34]||(t[34]=e=>o.editingToken.expirationUnit=e),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,t=>((0,i.uX)(),(0,i.Wv)(k,{key:t.value,label:e.$t(t.labelKey),value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.autoDelete,"onUpdate:modelValue":t[35]||(t[35]=e=>o.editingToken.autoDelete=e)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(M,{modelValue:o.showTokenResultDialog,"onUpdate:modelValue":t[40]||(t[40]=e=>o.showTokenResultDialog=e),title:e.$t("sysSecurity.tokenCreatedTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Dg,[(0,i.bF)(p,{type:"primary",onClick:t[39]||(t[39]=e=>o.showTokenResultDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.savedBtn")),1)]),_:1})])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",Mg,[(0,i.Lk)("p",Pg,[(0,i.bF)(u,{icon:"exclamation-triangle",style:{"margin-right":"5px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysSecurity.tokenCreatedWarning")),1)]),(0,i.bF)(h,{"label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(o.createdToken.name),1)]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.fullToken")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.createdToken.token,"onUpdate:modelValue":t[38]||(t[38]=e=>o.createdToken.token=e),readonly:""},{append:(0,i.k6)(()=>[(0,i.bF)(p,{onClick:l.copyToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.copyBtn")),1)]),_:1},8,["onClick"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])]),_:1},8,["modelValue","title","width"])])),[[P,o.loading]])}s(81148);const $g={s:1e3,m:6e4,h:36e5,d:864e5};function Lg(e,t,s){if(!Number.isFinite(t)||t<=0)throw new Error("有效期数值必须大于 0");const i="string"===typeof e?new Date(e):new Date(e.getTime());if($g[s])return new Date(i.getTime()+t*$g[s]).toISOString();if("M"===s)return i.setUTCMonth(i.getUTCMonth()+t),i.toISOString();if("Y"===s)return i.setUTCFullYear(i.getUTCFullYear()+t),i.toISOString();throw new Error(`无效的时间单位: ${s}`)}function Vg(e){const t=new Date(e),s=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0"),a=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),l=String(t.getSeconds()).padStart(2,"0");return`${s}-${i}-${n} ${a}:${o}:${l}`}function Eg(e,t=new Date){if(null===e||void 0===e)return{status:"active",label:"有效",expiresText:"永不过期"};const s=new Date(e),i=t instanceof Date?t:new Date(t),n=Vg(e);return i.getTime()>s.getTime()?{status:"expired",label:"已过期",expiresText:n}:{status:"active",label:"有效",expiresText:n}}var Ig={components:{FloatingSaveButton:jp},data(){return{authSettings:{user:{},admin:{}},uploadSettings:{moderate:{},ipQuery:{enabled:!1,channel:"customApi",customApi:{url:"",params:[{key:"ip",value:"{ip}"}],responseFields:[]}}},accessSettings:{},apiTokens:[],loading:!0,tokenLoading:!1,oriUserPassword:"",oriAdminPassword:"",showUserPassConfirm:!1,showAdminPassConfirm:!1,clearUserPassword:!1,clearAdminPassword:!1,showCreateTokenDialog:!1,showEditTokenDialog:!1,showTokenResultDialog:!1,timeUnitOptions:[{labelKey:"sysSecurity.timeUnitSeconds",value:"s"},{labelKey:"sysSecurity.timeUnitMinutes",value:"m"},{labelKey:"sysSecurity.timeUnitHours",value:"h"},{labelKey:"sysSecurity.timeUnitDays",value:"d"},{labelKey:"sysSecurity.timeUnitMonths",value:"M"},{labelKey:"sysSecurity.timeUnitYears",value:"Y"}],newToken:{name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},editingToken:{id:"",name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},createdToken:{name:"",token:""}}},computed:{dialogWidth(){return window.innerWidth>768?"50%":"90%"},userPassRules(){return{authCode:[{validator:(e,t,s)=>{const i=["%","&","?","#","/"],n=i.some(e=>t&&t.includes(e));n?s(new Error(this.$t("sysSecurity.passwordUrlReserved"))):s()},trigger:"blur"}],confirmNewUserPassword:[{validator:(e,t,s)=>{t?t!==this.authSettings.user.authCode?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmUploadPassword")))},trigger:"blur"}]}},adminPassRules(){return{confirmNewAdminPassword:[{validator:(e,t,s)=>{t?t!==this.authSettings.admin.adminPassword?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmAdminPassword")))},trigger:"blur"}]}},accessRules(){const e=(e,t,s)=>{!Number.isInteger(t)||t<1||t>3650?s(new Error(this.$t("sysSecurity.sessionMaxAgeInvalid"))):s()},t=(e,t,s)=>{if(!this.accessSettings.imageTransformEnabled||!t||!t.trim())return void s();const i=t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean),n=i.every(e=>{const t=e.match(/^(auto|[1-9]\d*)x(auto|[1-9]\d*)$/);return!(!t||"auto"===t[1]&&"auto"===t[2])&&t.slice(1).every(e=>"auto"===e||Number(e)<=4096)});n?s():s(new Error(this.$t("sysSecurity.imageTransformAllowedSizesInvalid")))};return{userSessionMaxAge:[{validator:e,trigger:"change"}],adminSessionMaxAge:[{validator:e,trigger:"change"}],imageTransformAllowedSizes:[{validator:t,trigger:["blur","change"]}]}},tokenRules(){return{name:[{required:!0,message:this.$t("sysSecurity.tokenNameRequired"),trigger:"blur"}],permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(e,t,s)=>{this.newToken.neverExpire||t&&!(t<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}},editTokenRules(){return{permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(e,t,s)=>{this.editingToken.neverExpire||t&&!(t<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}}},methods:{normalizeIpQuerySettings(e={}){const t=e.ipQuery||{},s=t.customApi||{},i=Array.isArray(s.params)&&s.params.length>0?s.params.map(e=>({key:e?.key||"",value:e?.value||""})):[{key:"ip",value:"{ip}"}],n=Array.isArray(s.responseFields)?s.responseFields.map(e=>"string"===typeof e?e:e?.path||""):[];return{...e,moderate:e.moderate||{},ipQuery:{enabled:t.enabled??!1,channel:t.channel||"customApi",customApi:{url:s.url||"",params:i,responseFields:n}}}},addIpQueryParam(){this.uploadSettings.ipQuery.customApi.params.push({key:"",value:""})},removeIpQueryParam(e){this.uploadSettings.ipQuery.customApi.params.length<=1||this.uploadSettings.ipQuery.customApi.params.splice(e,1)},addIpQueryResponseField(){this.uploadSettings.ipQuery.customApi.responseFields.push("")},removeIpQueryResponseField(e){this.uploadSettings.ipQuery.customApi.responseFields.splice(e,1)},moveIpQueryResponseField(e,t){const s=this.uploadSettings.ipQuery.customApi.responseFields,i=e+t;if(i<0||i>=s.length)return;const[n]=s.splice(e,1);s.splice(i,0,n)},handleUserPassInput(){this.authSettings.user.authCode!==this.oriUserPassword?this.showUserPassConfirm=!0:this.showUserPassConfirm=!1},handleAdminPassInput(){this.authSettings.admin.adminPassword!==this.oriAdminPassword?this.showAdminPassConfirm=!0:this.showAdminPassConfirm=!1},handleClearUserPassword(e){e&&(this.authSettings.user.authCode="",this.showUserPassConfirm=!1)},handleClearAdminPassword(e){e&&(this.authSettings.admin.adminPassword="",this.authSettings.admin.adminUsername="",this.showAdminPassConfirm=!1)},getPermissionText(e){const t={upload:this.$t("sysSecurity.permUpload"),delete:this.$t("sysSecurity.permDelete"),list:this.$t("sysSecurity.permList"),manage:this.$t("sysSecurity.permManage")};return t[e]||e},formatDate(e){return new Date(e).toLocaleString("zh-CN")},async loadApiTokens(){this.tokenLoading=!0;try{const e=await(0,Rt.A)("/api/manage/apiTokens"),t=await e.json();this.apiTokens=t.tokens||[]}catch(e){this.$message.error(this.$t("sysSecurity.tokenListFailed"))}finally{this.tokenLoading=!1}},createToken(){this.$refs.tokenForm.validate(async e=>{if(e)try{this.newToken.owner="admin";let e=null,t=!1;this.newToken.neverExpire||(e=Lg(new Date,this.newToken.expirationValue,this.newToken.expirationUnit),t=this.newToken.autoDelete);const s=await(0,Rt.A)("/api/manage/apiTokens",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:this.newToken.name,owner:this.newToken.owner,permissions:this.newToken.permissions,expiresAt:e,autoDelete:t})}),i=await s.json();s.ok?(this.createdToken={name:i.name,token:i.token},this.showCreateTokenDialog=!1,this.showTokenResultDialog=!0,this.newToken={name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenCreateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenCreateFailed"))}catch(t){this.$message.error(this.$t("sysSecurity.tokenCreateFailed"))}})},editToken(e){const t=null!==e.expiresAt&&void 0!==e.expiresAt;this.editingToken={id:e.id,name:e.name,owner:e.owner,permissions:[...e.permissions],neverExpire:!t,expirationValue:1,expirationUnit:"d",autoDelete:e.autoDelete||!1},this.showEditTokenDialog=!0},updateToken(){this.$refs.editTokenForm.validate(async e=>{if(e)try{let e=null,t=!1;this.editingToken.neverExpire||(e=Lg(new Date,this.editingToken.expirationValue,this.editingToken.expirationUnit),t=this.editingToken.autoDelete);const s=await(0,Rt.A)("/api/manage/apiTokens",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenId:this.editingToken.id,permissions:this.editingToken.permissions,expiresAt:e,autoDelete:t})}),i=await s.json();s.ok?(this.showEditTokenDialog=!1,await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenUpdateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenUpdateFailed"))}catch(t){this.$message.error(this.$t("sysSecurity.tokenUpdateFailed"))}})},async deleteToken(e){try{await this.$confirm(this.$t("sysSecurity.tokenDeleteConfirm"),this.$t("sysSecurity.tokenDeleteConfirmTitle"),{confirmButtonText:this.$t("sysSecurity.tokenDeleteConfirmOk"),cancelButtonText:this.$t("sysSecurity.tokenDeleteConfirmCancel"),type:"warning"});const t=await(0,Rt.A)(`/api/manage/apiTokens?id=${e}`,{method:"DELETE"}),s=await t.json();t.ok?(await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenDeleteSuccess"))):this.$message.error(s.error||this.$t("sysSecurity.tokenDeleteFailed"))}catch(t){"cancel"!==t&&this.$message.error(this.$t("sysSecurity.tokenDeleteFailed"))}},async copyToken(){try{await navigator.clipboard.writeText(this.createdToken.token),this.$message.success(this.$t("sysSecurity.tokenCopied"))}catch(e){this.$message.error(this.$t("sysSecurity.copyFailed"))}},onCreateNeverExpireChange(e){e&&(this.newToken.autoDelete=!1)},onEditNeverExpireChange(e){e&&(this.editingToken.autoDelete=!1)},getTokenStatus(e){return Eg(e)},saveSettings(){let e=[];e.push(new Promise(e=>{this.$refs.userPassForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.adminPassForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.accessForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.imageTransformForm.validate(t=>{e(t)})})),Promise.all(e).then(e=>{const t=e.every(e=>e);if(!t)return;if(this.accessSettings.userSessionMaxAge<1||!Number.isInteger(this.accessSettings.userSessionMaxAge)||this.accessSettings.userSessionMaxAge>3650||this.accessSettings.adminSessionMaxAge<1||!Number.isInteger(this.accessSettings.adminSessionMaxAge)||this.accessSettings.adminSessionMaxAge>3650)return void this.$message.error(this.$t("sysSecurity.sessionMaxAgeInvalid"));const s={auth:this.authSettings,upload:this.uploadSettings,access:this.accessSettings};delete s.auth.user.confirmNewUserPassword,delete s.auth.admin.confirmNewAdminPassword,this.clearUserPassword&&(s.auth.user._clear=!0,s.auth.user.authCode=""),this.clearAdminPassword&&(s.auth.admin._clear=!0,s.auth.admin.adminPassword=""),(0,Rt.A)("/api/manage/sysConfig/security",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}).then(e=>e.json()).then(e=>{if(e.adminPasswordChanged){const e=this.$t("sysSecurity.adminPasswordChangedRelogin");return this.$message.warning(e),void setTimeout(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")},1500)}this.$message.success(this.$t("sysSecurity.settingsSaved")),this.authSettings.user.authCode="",this.authSettings.admin.adminPassword="",this.oriUserPassword="",this.oriAdminPassword="",s.auth.user.authCode&&!s.auth.user._clear?this.authSettings.user._hasPassword=!0:s.auth.user._clear&&(this.authSettings.user._hasPassword=!1),s.auth.admin.adminPassword&&!s.auth.admin._clear?this.authSettings.admin._hasPassword=!0:s.auth.admin._clear&&(this.authSettings.admin._hasPassword=!1),this.showUserPassConfirm=!1,this.showAdminPassConfirm=!1,this.clearUserPassword=!1,this.clearAdminPassword=!1}).catch(()=>{})})}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/security").then(e=>e.json()).then(e=>{this.authSettings=e.auth,this.uploadSettings=this.normalizeIpQuerySettings(e.upload),this.accessSettings={imageTransformEnabled:!1,imageTransformAllowedSizes:"",...e.access},this.oriUserPassword="",this.oriAdminPassword="",this.authSettings.user.confirmNewUserPassword="",this.authSettings.admin.confirmNewAdminPassword="",this.loadApiTokens()}).finally(()=>{this.loading=!1})}};const Ug=(0,d.A)(Ig,[["render",Ag],["__scopeId","data-v-264510a6"]]);var Og=Ug;const Rg={class:"page-settings"},Wg={class:"first-title"},Bg={key:5,class:"announcement-refresh-option"};function zg(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Eu.P9,h=Eu.AV,u=Iu.qi,p=Vu.WK,f=Rp.dI,m=$u.xE,b=$u.US,y=jp,x=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Rg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.groupedSettings,(s,a)=>((0,i.uX)(),(0,i.CE)("div",{key:a,class:"first-settings"},[(0,i.Lk)("h3",Wg,(0,n.v_)(a),1),(0,i.bF)(b,{model:o.settings,"label-width":"150px"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s,(s,a)=>((0,i.uX)(),(0,i.Wv)(m,{key:s.id,class:(0,n.C4)({"announcement-manual-height":"announcement"===s.id&&null!==o.announcementManualHeight}),style:(0,n.Tr)("announcement"===s.id&&null!==o.announcementManualHeight?{"--announcement-manual-height":`${o.announcementManualHeight}px`}:void 0)},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.localized(s,"label"))+" ",1),s.tooltip?((0,i.uX)(),(0,i.Wv)(c,{key:0,content:l.localized(s,"tooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>["select"===s.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed,placeholder:l.localized(s,"placeholder"),style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s.options,e=>((0,i.uX)(),(0,i.Wv)(d,{key:e.value,label:l.localizedOption(e),value:e.value},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"channelName"===s.type?((0,i.uX)(),(0,i.Wv)(h,{key:1,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:!l.currentUploadChannel||0===l.currentChannelList.length,placeholder:e.$t("sysPage.channelSelectPlaceholder"),clearable:"",style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(d,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"boolean"===s.type?((0,i.uX)(),(0,i.Wv)(u,{key:2,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])):"textarea"===s.type?((0,i.uX)(),(0,i.Wv)(p,{key:3,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,type:"textarea",autosize:{minRows:2,maxRows:"announcement"===s.id?8:void 0},resize:"vertical",disabled:s.fixed,placeholder:l.localized(s,"placeholder"),onMousedown:e=>l.handleAnnouncementResizeStart(e,s)},null,8,["modelValue","onUpdate:modelValue","autosize","disabled","placeholder","onMousedown"])):((0,i.uX)(),(0,i.Wv)(p,{key:4,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed,placeholder:l.localized(s,"placeholder")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])),"announcement"===s.id?((0,i.uX)(),(0,i.CE)("div",Bg,[(0,i.bF)(f,{modelValue:o.refreshAnnouncement,"onUpdate:modelValue":t[0]||(t[0]=e=>o.refreshAnnouncement=e)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysPage.refreshAnnouncement")),1)]),_:1},8,["modelValue"])])):(0,i.Q3)("",!0)]),_:2},1032,["class","style"]))),128))]),_:2},1032,["model"])]))),128)),(0,i.bF)(y,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[x,o.loading]])}var Ng=s(457),jg={components:{FloatingSaveButton:jp},data(){return{settings:{config:[]},loading:!0,refreshAnnouncement:!1,announcementManualHeight:null,announcementResizeMouseUpHandler:null,availableChannels:{}}},computed:{isEn(){return"en"===this.$i18n.locale},groupedSettings(){const e={};return this.settings.config&&this.settings.config.forEach(t=>{const s=this.isEn?t.category_en||t.category||this.$t("sysPage.otherSettings"):t.category||this.$t("sysPage.otherSettings");e[s]||(e[s]=[]),e[s].push(t)}),e},currentUploadChannel(){const e=this.settings.config?.find(e=>"defaultUploadChannel"===e.id);return e?.value||""},currentChannelList(){return this.availableChannels[this.currentUploadChannel]||[]}},watch:{currentUploadChannel(e,t){if(e!==t){const t=this.settings.config?.find(e=>"defaultChannelName"===e.id);if(t){const s=this.availableChannels[e]||[];s.some(e=>e.name===t.value)||(t.value="")}}}},methods:{localized(e,t){return this.isEn&&e[t+"_en"]?e[t+"_en"]:e[t]||""},localizedOption(e){return this.isEn&&e.label_en?e.label_en:e.label},handleAnnouncementResizeStart(e,t){if("announcement"!==t.id)return;const s=e.target.closest?.("textarea");if(!s)return;const i=s.getBoundingClientRect(),n=24,a=e.clientX>=i.right-n&&e.clientY>=i.bottom-n;if(!a)return;const o=s.closest(".el-form-item");this.announcementResizeMouseUpHandler&&window.removeEventListener("mouseup",this.announcementResizeMouseUpHandler);const l=s.offsetHeight;s.style.height=`${l}px`,o?.classList.remove("announcement-manual-height"),this.announcementResizeMouseUpHandler=()=>{const e=s.offsetHeight,t=Math.abs(e-l)>1?e:this.announcementManualHeight;null!==t&&(this.announcementManualHeight=t,o?.style.setProperty("--announcement-manual-height",`${t}px`),o?.classList.add("announcement-manual-height")),this.announcementResizeMouseUpHandler=null},window.addEventListener("mouseup",this.announcementResizeMouseUpHandler,{once:!0})},saveSettings(){(0,Rt.A)("/api/manage/sysConfig/page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.settings,refreshAnnouncement:this.refreshAnnouncement})}).then(()=>{this.refreshAnnouncement=!1,this.$message.success(this.$t("sysPage.settingsSaved"))})},async fetchAvailableChannels(){try{const e=await Ng.A.get("/api/channels");e.data&&(this.availableChannels=e.data)}catch(e){console.error("Failed to fetch available channels:",e)}}},beforeUnmount(){this.announcementResizeMouseUpHandler&&window.removeEventListener("mouseup",this.announcementResizeMouseUpHandler)},mounted(){this.loading=!0,this.fetchAvailableChannels(),(0,Rt.A)("/api/manage/sysConfig/page").then(e=>e.json()).then(e=>{this.settings=e,this.settings.config&&this.settings.config.forEach(e=>{void 0!==e.value&&null!==e.value&&""!==e.value||void 0===e.default||(e.value=e.default),"boolean"===e.type&&"string"===typeof e.value&&(e.value="true"===e.value)})}).finally(()=>{this.loading=!1})}};const Hg=(0,d.A)(jg,[["render",zg],["__scopeId","data-v-342e4dda"]]);var qg=Hg;const Xg={class:"others-settings"},Kg={class:"first-settings"},Qg={class:"first-title"},Yg={class:"first-title"},Gg={class:"first-title"},Jg={class:"first-title"},Zg=["innerHTML"],ef={class:"first-title"};function tf(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Iu.qi,h=$u.xE,u=$u.US,p=Vu.WK,f=Eu.P9,m=Eu.AV,b=jp,y=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Xg,[(0,i.Lk)("div",Kg,[(0,i.Lk)("h3",Qg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.remoteTelemetry"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.remoteTelemetryTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.telemetry,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.telemetry.enabled,"onUpdate:modelValue":t[0]||(t[0]=e=>o.settings.telemetry.enabled=e),disabled:o.settings.telemetry.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"])]),_:1},8,["model"]),(0,i.Lk)("h3",Yg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.cloudflareApiToken"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.cloudflareApiTokenTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.cloudflareApiToken,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.zoneId")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_ZONE_ID,"onUpdate:modelValue":t[1]||(t[1]=e=>o.settings.cloudflareApiToken.CF_ZONE_ID=e),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.accountEmail")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_EMAIL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.settings.cloudflareApiToken.CF_EMAIL=e),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:"API Key"},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_API_KEY,"onUpdate:modelValue":t[3]||(t[3]=e=>o.settings.cloudflareApiToken.CF_API_KEY=e),disabled:o.settings.cloudflareApiToken.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Gg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.randomImageApi"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.randomImageApiTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.randomImageAPI,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.randomImageAPI.enabled,"onUpdate:modelValue":t[4]||(t[4]=e=>o.settings.randomImageAPI.enabled=e),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"randomImageAPI.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysOthers.directory")),1),(0,i.bF)(c,{content:e.$t("sysOthers.directoryTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.randomImageAPI.allowedDir,"onUpdate:modelValue":t[5]||(t[5]=e=>o.settings.randomImageAPI.allowedDir=e),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Jg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.publicBrowse"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.publicBrowseTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.publicBrowse,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.publicBrowse.enabled,"onUpdate:modelValue":t[6]||(t[6]=e=>o.settings.publicBrowse.enabled=e),disabled:o.settings.publicBrowse.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"publicBrowse.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysOthers.openDirectory")),1),(0,i.bF)(c,{placement:"right","raw-content":""},{content:(0,i.k6)(()=>[(0,i.Lk)("div",{style:{"max-width":"320px","line-height":"1.6"},innerHTML:e.$t("sysOthers.openDirectoryTooltip")},null,8,Zg)]),default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.publicBrowse.allowedDir,"onUpdate:modelValue":t[7]||(t[7]=e=>o.settings.publicBrowse.allowedDir=e),disabled:o.settings.publicBrowse.fixed,placeholder:"wallpaper,photos,album"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",ef,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.webdav"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.webdavTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.webDAV,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.webDAV.enabled,"onUpdate:modelValue":t[8]||(t[8]=e=>o.settings.webDAV.enabled=e),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.username,"onUpdate:modelValue":t[9]||(t[9]=e=>o.settings.webDAV.username=e),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.password,"onUpdate:modelValue":t[10]||(t[10]=e=>o.settings.webDAV.password=e),disabled:o.settings.webDAV.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavUploadChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.uploadChannel,"onUpdate:modelValue":t[11]||(t[11]=e=>o.settings.webDAV.uploadChannel=e),disabled:o.settings.webDAV.fixed,placeholder:e.$t("sysOthers.webdavDefaultChannel"),clearable:""},{default:(0,i.k6)(()=>[(0,i.bF)(f,{label:"Telegram",value:"telegram"}),(0,i.bF)(f,{label:"Cloudflare R2",value:"cfr2"}),(0,i.bF)(f,{label:"S3",value:"s3"}),(0,i.bF)(f,{label:"Discord",value:"discord"}),(0,i.bF)(f,{label:"HuggingFace",value:"huggingface"}),(0,i.bF)(f,{label:"WebDAV",value:"webdav"})]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"]),o.settings.webDAV.uploadChannel&&l.webdavChannelList.length>1?((0,i.uX)(),(0,i.Wv)(h,{key:0,label:e.$t("sysOthers.webdavChannelName")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.channelName,"onUpdate:modelValue":t[12]||(t[12]=e=>o.settings.webDAV.channelName=e),disabled:o.settings.webDAV.fixed,placeholder:e.$t("uploadSettings.autoSelect"),clearable:""},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.webdavChannelList,e=>((0,i.uX)(),(0,i.Wv)(f,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.bF)(b,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[y,o.loading]])}var sf={components:{FloatingSaveButton:jp},data(){return{settings:{telemetry:{},randomImageAPI:{},cloudflareApiToken:{},webDAV:{},publicBrowse:{}},availableChannels:{},loading:!0}},computed:{webdavChannelList(){const e=this.settings.webDAV?.uploadChannel;return e&&this.availableChannels[e]||[]}},watch:{"settings.webDAV.uploadChannel"(){this.settings.webDAV&&(this.settings.webDAV.channelName="")}},methods:{saveSettings(){(0,Rt.A)("/api/manage/sysConfig/others",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success(this.$t("sysOthers.settingsSaved")))},async fetchAvailableChannels(){try{const e=await(0,Rt.A)("/api/channels");e.ok&&(this.availableChannels=await e.json())}catch(e){console.error("Failed to fetch available channels:",e)}}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/others").then(e=>e.json()).then(e=>{this.settings=e}).finally(()=>{this.loading=!1}),this.fetchAvailableChannels()}};const nf=(0,d.A)(sf,[["render",tf],["__scopeId","data-v-69ae97d8"]]);var af=nf,of=s(48903),lf={name:"SystemConfig",mixins:[of.A],data(){return{activeIndex:"status",isSidebarCollapse:!1}},watch:{"$route.hash":{immediate:!0,handler(e){this.activeIndex=e.replace("#",""),window.scrollTo(0,0)}},activeIndex(e){const t=`#${e}`;this.$router.push({hash:t})}},components:{DashboardTabs:f.A,SysConfigTabs:u,SysCogStatus:Du,SysCogUpload:Op,SysCogSecurity:Og,SysCogPage:qg,SysCogOthers:af},computed:{disableTooltip(){return window.innerWidth<768},currentComponent(){const e=this.$route.hash.replace("#","");switch(e){case"status":return Du;case"upload":return Op;case"security":return Og;case"page":return qg;case"others":return af;default:return Du}}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},setDefaultHash(){const e="#status";window.location.hash=e,this.activeIndex=e.replace("#","")}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),window.location.hash||this.setDefaultHash()}};const rf=(0,d.A)(lf,[["render",x],["__scopeId","data-v-7e9e1ae0"]]);var cf=rf},63003:function(e,t,s){s(85331)},64752:function(e,t,s){s(85331),s(38736),s(18785)},70415:function(e,t,s){s(85331),s(73565)},73565:function(e,t,s){s(85331)},91114:function(e,t,s){function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function n(e,t){if("object"!=i(e)||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var n=s.call(e,t||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function a(e){var t=n(e,"string");return"symbol"==i(t)?t:t+""}function o(e,t,s){return(t=a(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}s.d(t,{A:function(){return o}})},97769:function(e,t,s){s.d(t,{A:function(){return h}});var i=s(56768);const n={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},a={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},o={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function l(e,t,s,l,r,c){const d=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("span",(0,i.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${s.type}`]}),["telegram"===s.type?((0,i.uX)(),(0,i.CE)("svg",n,[...t[0]||(t[0]=[(0,i.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===s.type?((0,i.uX)(),(0,i.CE)("svg",a,[...t[1]||(t[1]=[(0,i.Fv)('',9)])])):"webdav"===s.type?((0,i.uX)(),(0,i.CE)("svg",o,[...t[2]||(t[2]=[(0,i.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,i.uX)(),(0,i.Wv)(d,{key:3,icon:c.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},c=s(71241);const d=(0,c.A)(r,[["render",l],["__scopeId","data-v-ce6ff2ce"]]);var h=d},98642:function(e,t,s){s(85331)}}]); -//# sourceMappingURL=417.f95b3308.js.map \ No newline at end of file +class po{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,t,s,i){const n=t.listeners[i],a=t.duration;n.forEach(i=>i({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(s-t.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Ni.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((s,i)=>{if(!s.running||!s.items.length)return;const n=s.items;let a,o=n.length-1,l=!1;for(;o>=0;--o)a=n[o],a._active?(a._total>s.duration&&(s.duration=a._total),a.tick(e),l=!0):(n[o]=n[n.length-1],n.pop());l&&(i.draw(),this._notify(i,s,e,"progress")),n.length||(s.running=!1,this._notify(i,s,e,"complete"),s.initial=!1),t+=n.length}),this._lastDate=e,0===t&&(this._running=!1)}_getAnims(e){const t=this._charts;let s=t.get(e);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,s)),s}listen(e,t,s){this._getAnims(e).listeners[t].push(s)}add(e,t){t&&t.length&&this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){const t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;const t=this._charts.get(e);return!!(t&&t.running&&t.items.length)}stop(e){const t=this._charts.get(e);if(!t||!t.items.length)return;const s=t.items;let i=s.length-1;for(;i>=0;--i)s[i].cancel();t.items=[],this._notify(e,t,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var go=new po;const fo="transparent",mo={boolean(e,t,s){return s>.5?t:e},color(e,t,s){const i=sn(e||fo),n=i.valid&&sn(t||fo);return n&&n.valid?n.mix(i,s).hexString():t},number(e,t,s){return e+(t-e)*s}};class bo{constructor(e,t,s,i){const n=t[s];i=Kn([e.to,i,n,e.from]);const a=Kn([e.from,n,i]);this._active=!0,this._fn=e.fn||mo[e.type||typeof a],this._easing=en[e.easing]||en.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=s,this._from=a,this._to=i,this._promises=void 0}active(){return this._active}update(e,t,s){if(this._active){this._notify(!1);const i=this._target[this._prop],n=s-this._start,a=this._duration-n;this._start=s,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=n,this._loop=!!e.loop,this._to=Kn([e.to,t,i,e.from]),this._from=Kn([e.from,i,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const t=e-this._start,s=this._duration,i=this._prop,n=this._from,a=this._loop,o=this._to;let l;if(this._active=n!==o&&(a||t1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[i]=this._fn(n,o,l))}wait(){const e=this._promises||(this._promises=[]);return new Promise((t,s)=>{e.push({res:t,rej:s})})}_notify(e){const t=e?"res":"rej",s=this._promises||[];for(let i=0;i{const n=e[i];if(!Us(n))return;const a={};for(const e of t)a[e]=n[e];(Is(n.properties)&&n.properties||[i]).forEach(e=>{e!==i&&s.has(e)||s.set(e,a)})})}_animateOptions(e,t){const s=t.options,i=vo(e,s);if(!i)return[];const n=this._createAnimations(i,s);return s.$shared&&xo(e.options.$animations,s).then(()=>{e.options=s},()=>{}),n}_createAnimations(e,t){const s=this._properties,i=[],n=e.$animations||(e.$animations={}),a=Object.keys(t),o=Date.now();let l;for(l=a.length-1;l>=0;--l){const r=a[l];if("$"===r.charAt(0))continue;if("options"===r){i.push(...this._animateOptions(e,t));continue}const c=t[r];let d=n[r];const h=s.get(r);if(d){if(h&&d.active()){d.update(h,c,o);continue}d.cancel()}h&&h.duration?(n[r]=d=new bo(h,e,r,c),i.push(d)):e[r]=c}return i}update(e,t){if(0===this._properties.size)return void Object.assign(e,t);const s=this._createAnimations(e,t);return s.length?(go.add(this._chart,s),!0):void 0}}function xo(e,t){const s=[],i=Object.keys(t);for(let n=0;n0||!s&&t<0)return n.index}return null}function $o(e,t){const{chart:s,_cachedMeta:i}=e,n=s._stacks||(s._stacks={}),{iScale:a,vScale:o,index:l}=i,r=a.axis,c=o.axis,d=Mo(a,o,i),h=t.length;let u;for(let p=0;ps[e].axis===t).shift()}function Vo(e,t){return Yn(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Eo(e,t,s){return Yn(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:s,index:t,mode:"default",type:"data"})}function Io(e,t){const s=e.controller.index,i=e.vScale&&e.vScale.axis;if(i){t=t||e._parsed;for(const e of t){const t=e._stacks;if(!t||void 0===t[i]||void 0===t[i][s])return;delete t[i][s],void 0!==t[i]._visualValues&&void 0!==t[i]._visualValues[s]&&delete t[i]._visualValues[s]}}}const Uo=e=>"reset"===e||"none"===e,Oo=(e,t)=>t?e:Object.assign({},e),Ro=(e,t,s)=>e&&!t.hidden&&t._stacked&&{keys:Co(s,!0),values:null};class Wo{constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=To(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(e){this.index!==e&&Io(this._cachedMeta),this.index=e}linkScales(){const e=this.chart,t=this._cachedMeta,s=this.getDataset(),i=(e,t,s,i)=>"x"===e?t:"r"===e?i:s,n=t.xAxisID=Ws(s.xAxisID,Lo(e,"x")),a=t.yAxisID=Ws(s.yAxisID,Lo(e,"y")),o=t.rAxisID=Ws(s.rAxisID,Lo(e,"r")),l=t.indexAxis,r=t.iAxisID=i(l,n,a,o),c=t.vAxisID=i(l,a,n,o);t.xScale=this.getScaleForId(n),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(r),t.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){const t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update("reset")}_destroy(){const e=this._cachedMeta;this._data&&Bi(this._data,this),e._stacked&&Io(e)}_dataCheck(){const e=this.getDataset(),t=e.data||(e.data=[]),s=this._data;if(Us(t)){const e=this._cachedMeta;this._data=Fo(t,e)}else if(s!==t){if(s){Bi(s,this);const e=this._cachedMeta;Io(e),e._parsed=[]}t&&Object.isExtensible(t)&&Wi(t,this),this._syncList=[],this._data=t}}addElements(){const e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){const t=this._cachedMeta,s=this.getDataset();let i=!1;this._dataCheck();const n=t._stacked;t._stacked=To(t.vScale,t),t.stack!==s.stack&&(i=!0,Io(t),t.stack=s.stack),this._resyncElements(e),(i||n!==t._stacked)&&($o(this,t._parsed),t._stacked=To(t.vScale,t))}configure(){const e=this.chart.config,t=e.datasetScopeKeys(this._type),s=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){const{_cachedMeta:s,_data:i}=this,{iScale:n,_stacked:a}=s,o=n.axis;let l,r,c,d=0===e&&t===i.length||s._sorted,h=e>0&&s._parsed[e-1];if(!1===this._parsing)s._parsed=i,s._sorted=!0,c=i;else{c=Is(i[e])?this.parseArrayData(s,i,e,t):Us(i[e])?this.parseObjectData(s,i,e,t):this.parsePrimitiveData(s,i,e,t);const n=()=>null===r[o]||h&&r[o]t||d=0;--h)if(!p()){this.updateRangeFromParsed(r,e,u,l);break}return r}getAllParsedValues(e){const t=this._cachedMeta._parsed,s=[];let i,n,a;for(i=0,n=t.length;i=0&&ethis.getContext(s,i,t),g=r.resolveNamedOptions(h,u,p,d);return g.$shared&&(g.$shared=l,n[a]=Object.freeze(Oo(g,l))),g}_resolveAnimations(e,t,s){const i=this.chart,n=this._cachedDataOpts,a=`animation-${t}`,o=n[a];if(o)return o;let l;if(!1!==i.options.animation){const i=this.chart.config,n=i.datasetAnimationScopeKeys(this._type,t),a=i.getOptionScopes(this.getDataset(),n);l=i.createResolver(a,this.getContext(e,s,t))}const r=new yo(i,l&&l.animations);return l&&l._cacheable&&(n[a]=Object.freeze(r)),r}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,t){return!t||Uo(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){const s=this.resolveDataElementOptions(e,t),i=this._sharedOptions,n=this.getSharedOptions(s),a=this.includeOptions(t,n)||n!==i;return this.updateSharedOptions(n,t,s),{sharedOptions:n,includeOptions:a}}updateElement(e,t,s,i){Uo(i)?Object.assign(e,s):this._resolveAnimations(t,i).update(e,s)}updateSharedOptions(e,t,s){e&&!Uo(t)&&this._resolveAnimations(void 0,t).update(e,s)}_setStyle(e,t,s,i){e.active=i;const n=this.getStyle(t,i);this._resolveAnimations(t,s,i).update(e,{options:!i&&this.getSharedOptions(n)||n})}removeHoverStyle(e,t,s){this._setStyle(e,s,"active",!1)}setHoverStyle(e,t,s){this._setStyle(e,s,"active",!0)}_removeDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){const t=this._data,s=this._cachedMeta.data;for(const[o,l,r]of this._syncList)this[o](l,r);this._syncList=[];const i=s.length,n=t.length,a=Math.min(n,i);a&&this.parse(0,a),n>i?this._insertElements(i,n-i,e):n{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(l(n),o=e;oe-t))}return e._cache.$bar}function zo(e){const t=e.iScale,s=Bo(t,e.type);let i,n,a,o,l=t._length;const r=()=>{32767!==a&&-32768!==a&&(ii(o)&&(l=Math.min(l,Math.abs(a-o)||l)),o=a)};for(i=0,n=s.length;i0?n[e-1]:null,l=eMath.abs(l)&&(r=l,c=o),t[s.axis]=c,t._custom={barStart:r,barEnd:c,start:n,end:a,min:o,max:l}}function qo(e,t,s,i){return Is(e)?Ho(e,t,s,i):t[s.axis]=s.parse(e,i),t}function Xo(e,t,s,i){const n=e.iScale,a=e.vScale,o=n.getLabels(),l=n===a,r=[];let c,d,h,u;for(c=s,d=s+i;c=s?1:-1)}function Yo(e){let t,s,i,n,a;return e.horizontal?(t=e.base>e.x,s="left",i="right"):(t=e.basee.controller.options.grouped),n=s.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),l=o&&o[s.axis],r=e=>{const t=e._parsed.find(e=>e[s.axis]===l),i=t&&t[e.vScale.axis];if(Es(i)||isNaN(i))return!0};for(const c of i)if((void 0===t||!r(c))&&((!1===n||-1===a.indexOf(c.stack)||void 0===n&&void 0===c.stack)&&a.push(c.stack),c.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(s=>e[s].axis===t).shift()}_getAxis(){const e={},t=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)e[Ws("x"===this.chart.options.indexAxis?s.xAxisID:s.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,s){const i=this._getStacks(e,s),n=void 0!==t?i.indexOf(t):-1;return-1===n?i.length-1:n}_getRuler(){const e=this.options,t=this._cachedMeta,s=t.iScale,i=[];let n,a;for(n=0,a=t.data.length;n=0;--s)t=Math.max(t,e[s].size(this.resolveDataElementOptions(s))/2);return t>0&&t}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart.data.labels||[],{xScale:i,yScale:n}=t,a=this.getParsed(e),o=i.getLabelForValue(a.x),l=n.getLabelForValue(a.y),r=a._custom;return{label:s[e]||"",value:"("+o+", "+l+(r?", "+r:"")+")"}}update(e){const t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,s,i){const n="reset"===i,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:l,includeOptions:r}=this._getSharedOptions(t,i),c=a.axis,d=o.axis;for(let h=t;hAi(e,l,r,!0)?1:Math.max(t,t*s,i,i*s),g=(e,t,i)=>Ai(e,l,r,!0)?-1:Math.min(t,t*s,i,i*s),f=p(0,c,h),m=p(ui,d,u),b=g(li,c,h),y=g(li+ui,d,u);i=(f-b)/2,n=(m-y)/2,a=-(f+b)/2,o=-(m+y)/2}return{ratioX:i,ratioY:n,offsetX:a,offsetY:o}}(0,Bt.A)(il,"id","bubble"),(0,Bt.A)(il,"defaults",{datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}}),(0,Bt.A)(il,"overrides",{scales:{x:{type:"linear"},y:{type:"linear"}}});class al extends Wo{constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){const s=this.getDataset().data,i=this._cachedMeta;if(!1===this._parsing)i._parsed=s;else{let n,a,o=e=>+s[e];if(Us(s[e])){const{key:e="value"}=this._parsing;o=t=>+ti(s[t],e)}for(n=e,a=e+t;n0&&!isNaN(e)?ri*(Math.abs(e)/t):0}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=hn(t._parsed[e],s.options.locale);return{label:i[e]||"",value:n}}getMaxBorderWidth(e){let t=0;const s=this.chart;let i,n,a,o,l;if(!e)for(i=0,n=s.data.datasets.length;i"spacing"!==e,_indexable:e=>"spacing"!==e&&!e.startsWith("borderDash")&&!e.startsWith("hoverBorderDash")}),(0,Bt.A)(al,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const t=e.data,{labels:{pointStyle:s,textAlign:i,color:n,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,l)=>{const r=e.getDatasetMeta(0),c=r.controller.getStyle(l);return{text:t,fillStyle:c.backgroundColor,fontColor:n,hidden:!e.getDataVisibility(l),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:i,pointStyle:s,borderRadius:a&&(o||c.borderRadius),index:l}}):[]}},onClick(e,t,s){s.chart.toggleDataVisibility(t.index),s.chart.update()}}}});class ol extends Wo{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){const t=this._cachedMeta,{dataset:s,data:i=[],_dataset:n}=t,a=this.chart._animationsDisabled;let{start:o,count:l}=Qi(t,i,a);this._drawStart=o,this._drawCount=l,Yi(t)&&(o=0,l=i.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!n._decimated,s.points=i;const r=this.resolveDatasetElementOptions(e);this.options.showLine||(r.borderWidth=0),r.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:r},e),this.updateElements(i,o,l,e)}updateElements(e,t,s,i){const n="reset"===i,{iScale:a,vScale:o,_stacked:l,_dataset:r}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(t,i),h=a.axis,u=o.axis,{spanGaps:p,segment:g}=this.options,f=ki(p)?p:Number.POSITIVE_INFINITY,m=this.chart._animationsDisabled||n||"none"===i,b=t+s,y=e.length;let x=t>0&&this.getParsed(t-1);for(let v=0;v=b){p.skip=!0;continue}const y=this.getParsed(v),k=Es(y[u]),_=p[h]=a.getPixelForValue(y[h],v),w=p[u]=n||k?o.getBasePixel():o.getPixelForValue(l?this.applyStack(o,y,l):y[u],v);p.skip=isNaN(_)||isNaN(w)||k,p.stop=v>0&&Math.abs(y[h]-x[h])>f,g&&(p.parsed=y,p.raw=r.data[v]),d&&(p.options=c||this.resolveDataElementOptions(v,s.active?"active":i)),m||this.updateElement(s,v,p,i),x=y}}getMaxOverflow(){const e=this._cachedMeta,t=e.dataset,s=t.options&&t.options.borderWidth||0,i=e.data||[];if(!i.length)return s;const n=i[0].size(this.resolveDataElementOptions(0)),a=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(s,n,a)/2}draw(){const e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}(0,Bt.A)(ol,"id","line"),(0,Bt.A)(ol,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),(0,Bt.A)(ol,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class ll extends Wo{constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){const t=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=hn(t._parsed[e].r,s.options.locale);return{label:i[e]||"",value:n}}parseObjectData(e,t,s,i){return ma.bind(this)(e,t,s,i)}update(e){const t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){const e=this._cachedMeta,t={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((e,s)=>{const i=this.getParsed(s).r;!isNaN(i)&&this.chart.getDataVisibility(s)&&(it.max&&(t.max=i))}),t}_updateRadius(){const e=this.chart,t=e.chartArea,s=e.options,i=Math.min(t.right-t.left,t.bottom-t.top),n=Math.max(i/2,0),a=Math.max(s.cutoutPercentage?n/100*s.cutoutPercentage:1,0),o=(n-a)/e.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(e,t,s,i){const n="reset"===i,a=this.chart,o=a.options,l=o.animation,r=this._cachedMeta.rScale,c=r.xCenter,d=r.yCenter,h=r.getIndexAngle(0)-.5*li;let u,p=h;const g=360/this.countVisibleElements();for(u=0;u{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&t++}),t}_computeAngle(e,t,s){return this.chart.getDataVisibility(e)?Ci(this.resolveDataElementOptions(e,t).angle||s):0}}(0,Bt.A)(ll,"id","polarArea"),(0,Bt.A)(ll,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),(0,Bt.A)(ll,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const t=e.data;if(t.labels.length&&t.datasets.length){const{labels:{pointStyle:s,color:i}}=e.legend.options;return t.labels.map((t,n)=>{const a=e.getDatasetMeta(0),o=a.controller.getStyle(n);return{text:t,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:i,lineWidth:o.borderWidth,pointStyle:s,hidden:!e.getDataVisibility(n),index:n}})}return[]}},onClick(e,t,s){s.chart.toggleDataVisibility(t.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class rl extends al{}(0,Bt.A)(rl,"id","pie"),(0,Bt.A)(rl,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class cl extends Wo{getLabelAndValue(e){const t=this._cachedMeta.vScale,s=this.getParsed(e);return{label:t.getLabels()[e],value:""+t.getLabelForValue(s[t.axis])}}parseObjectData(e,t,s,i){return ma.bind(this)(e,t,s,i)}update(e){const t=this._cachedMeta,s=t.dataset,i=t.data||[],n=t.iScale.getLabels();if(s.points=i,"resize"!==e){const t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);const a={_loop:!0,_fullLoop:n.length===i.length,options:t};this.updateElement(s,void 0,a,e)}this.updateElements(i,0,i.length,e)}updateElements(e,t,s,i){const n=this._cachedMeta.rScale,a="reset"===i;for(let o=t;o0&&this.getParsed(t-1);for(let x=t;x0&&Math.abs(s[u]-y[u])>m,f&&(c.parsed=s,c.raw=r.data[x]),h&&(c.options=d||this.resolveDataElementOptions(x,t.active?"active":i)),b||this.updateElement(t,x,c,i),y=s}this.updateSharedOptions(d,i,c)}getMaxOverflow(){const e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let s=t.length-1;s>=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}const s=e.dataset,i=s.options&&s.options.borderWidth||0;if(!t.length)return i;const n=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(i,n,a)/2}}(0,Bt.A)(dl,"id","scatter"),(0,Bt.A)(dl,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),(0,Bt.A)(dl,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});function hl(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class ul{static override(e){Object.assign(ul.prototype,e)}constructor(e){(0,Bt.A)(this,"options",void 0),this.options=e||{}}init(){}formats(){return hl()}parse(){return hl()}format(){return hl()}add(){return hl()}diff(){return hl()}startOf(){return hl()}endOf(){return hl()}}var pl={_date:ul};function gl(e,t,s,i){const{controller:n,data:a,_sorted:o}=e,l=n._cachedMeta.iScale,r=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(l&&t===l.axis&&"r"!==t&&o&&a.length){const o=l._reversePixels?Ui:Ii;if(!i){const i=o(a,t,s);if(r){const{vScale:t}=n._cachedMeta,{_parsed:s}=e,a=s.slice(0,i.lo+1).reverse().findIndex(e=>!Es(e[t.axis]));i.lo-=Math.max(0,a);const o=s.slice(i.hi).findIndex(e=>!Es(e[t.axis]));i.hi+=Math.max(0,o)}return i}if(n._sharedOptions){const e=a[0],i="function"===typeof e.getRange&&e.getRange(t);if(i){const e=o(a,t,s-i),n=o(a,t,s+i);return{lo:e.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function fl(e,t,s,i,n){const a=e.getSortedVisibleDatasetMetas(),o=s[t];for(let l=0,r=a.length;l{e[o]&&e[o](t[s],n)&&(a.push({element:e,datasetIndex:i,index:r}),l=l||e.inRange(t.x,t.y,n))}),i&&!l?[]:a}var _l={evaluateInteractionItems:fl,modes:{index(e,t,s,i){const n=Ia(t,e),a=s.axis||"x",o=s.includeInvisible||!1,l=s.intersect?bl(e,n,a,i,o):vl(e,n,a,!1,i,o),r=[];return l.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{const t=l[0].index,s=e.data[t];s&&!s.skip&&r.push({element:s,datasetIndex:e.index,index:t})}),r):[]},dataset(e,t,s,i){const n=Ia(t,e),a=s.axis||"xy",o=s.includeInvisible||!1;let l=s.intersect?bl(e,n,a,i,o):vl(e,n,a,!1,i,o);if(l.length>0){const t=l[0].datasetIndex,s=e.getDatasetMeta(t).data;l=[];for(let e=0;ee.pos===t)}function Sl(e,t){return e.filter(e=>-1===wl.indexOf(e.pos)&&e.box.axis===t)}function Fl(e,t){return e.sort((e,s)=>{const i=t?s:e,n=t?e:s;return i.weight===n.weight?i.index-n.index:i.weight-n.weight})}function Tl(e){const t=[];let s,i,n,a,o,l;for(s=0,i=(e||[]).length;se.box.fullSize),!0),i=Fl(Cl(t,"left"),!0),n=Fl(Cl(t,"right")),a=Fl(Cl(t,"top"),!0),o=Fl(Cl(t,"bottom")),l=Sl(t,"x"),r=Sl(t,"y");return{fullSize:s,leftAndTop:i.concat(a),rightAndBottom:n.concat(r).concat(o).concat(l),chartArea:Cl(t,"chartArea"),vertical:i.concat(n).concat(r),horizontal:a.concat(o).concat(l)}}function Al(e,t,s,i){return Math.max(e[s],t[s])+Math.max(e[i],t[i])}function $l(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Ll(e,t,s,i){const{pos:n,box:a}=s,o=e.maxPadding;if(!Us(n)){s.size&&(e[n]-=s.size);const t=i[s.stack]||{size:0,count:1};t.size=Math.max(t.size,s.horizontal?a.height:a.width),s.size=t.size/t.count,e[n]+=s.size}a.getPadding&&$l(o,a.getPadding());const l=Math.max(0,t.outerWidth-Al(o,e,"left","right")),r=Math.max(0,t.outerHeight-Al(o,e,"top","bottom")),c=l!==e.w,d=r!==e.h;return e.w=l,e.h=r,s.horizontal?{same:c,other:d}:{same:d,other:c}}function Vl(e){const t=e.maxPadding;function s(s){const i=Math.max(t[s]-e[s],0);return e[s]+=i,i}e.y+=s("top"),e.x+=s("left"),s("right"),s("bottom")}function El(e,t){const s=t.maxPadding;function i(e){const i={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{i[e]=Math.max(t[e],s[e])}),i}return i(e?["left","right"]:["top","bottom"])}function Il(e,t,s,i){const n=[];let a,o,l,r,c,d;for(a=0,o=e.length,c=0;a{"function"===typeof e.beforeLayout&&e.beforeLayout()});const d=r.reduce((e,t)=>t.box.options&&!1===t.box.options.display?e:e+1,0)||1,h=Object.freeze({outerWidth:t,outerHeight:s,padding:n,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/d,hBoxMaxHeight:o/2}),u=Object.assign({},n);$l(u,qn(i));const p=Object.assign({maxPadding:u,w:a,h:o,x:n.left,y:n.top},n),g=Pl(r.concat(c),h);Il(l.fullSize,p,h,g),Il(r,p,h,g),Il(c,p,h,g)&&Il(r,p,h,g),Vl(p),Ol(l.leftAndTop,p,h,g),p.x+=p.w,p.y+=p.h,Ol(l.rightAndBottom,p,h,g),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},js(l.chartArea,t=>{const s=t.box;Object.assign(s,e.chartArea),s.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}};class Wl{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,s){}removeEventListener(e,t,s){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,s,i){return t=Math.max(0,t||e.width),s=s||e.height,{width:t,height:Math.max(0,i?Math.floor(t/i):s)}}isAttached(e){return!0}updateConfig(e){}}class Bl extends Wl{acquireContext(e){return e&&e.getContext&&e.getContext("2d")||null}updateConfig(e){e.options.animation=!1}}const zl="$chartjs",Nl={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},jl=e=>null===e||""===e;function Hl(e,t){const s=e.style,i=e.getAttribute("height"),n=e.getAttribute("width");if(e[zl]={initial:{height:i,width:n,style:{display:s.display,height:s.height,width:s.width}}},s.display=s.display||"block",s.boxSizing=s.boxSizing||"border-box",jl(n)){const t=za(e,"width");void 0!==t&&(e.width=t)}if(jl(i))if(""===e.style.height)e.height=e.width/(t||2);else{const t=za(e,"height");void 0!==t&&(e.height=t)}return e}const ql=!!Ba&&{passive:!0};function Xl(e,t,s){e&&e.addEventListener(t,s,ql)}function Kl(e,t,s){e&&e.canvas&&e.canvas.removeEventListener(t,s,ql)}function Ql(e,t){const s=Nl[e.type]||e.type,{x:i,y:n}=Ia(e,t);return{type:s,chart:t,native:e,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Yl(e,t){for(const s of e)if(s===t||s.contains(t))return!0}function Gl(e,t,s){const i=e.canvas,n=new MutationObserver(e=>{let t=!1;for(const s of e)t=t||Yl(s.addedNodes,i),t=t&&!Yl(s.removedNodes,i);t&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}function Jl(e,t,s){const i=e.canvas,n=new MutationObserver(e=>{let t=!1;for(const s of e)t=t||Yl(s.removedNodes,i),t=t&&!Yl(s.addedNodes,i);t&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}const Zl=new Map;let er=0;function tr(){const e=window.devicePixelRatio;e!==er&&(er=e,Zl.forEach((t,s)=>{s.currentDevicePixelRatio!==e&&t()}))}function sr(e,t){Zl.size||window.addEventListener("resize",tr),Zl.set(e,t)}function ir(e){Zl.delete(e),Zl.size||window.removeEventListener("resize",tr)}function nr(e,t,s){const i=e.canvas,n=i&&Ma(i);if(!n)return;const a=ji((e,t)=>{const i=n.clientWidth;s(e,t),i{const t=e[0],s=t.contentRect.width,i=t.contentRect.height;0===s&&0===i||a(s,i)});return o.observe(n),sr(e,a),o}function ar(e,t,s){s&&s.disconnect(),"resize"===t&&ir(e)}function or(e,t,s){const i=e.canvas,n=ji(t=>{null!==e.ctx&&s(Ql(t,e))},e);return Xl(i,t,n),n}class lr extends Wl{acquireContext(e,t){const s=e&&e.getContext&&e.getContext("2d");return s&&s.canvas===e?(Hl(e,t),s):null}releaseContext(e){const t=e.canvas;if(!t[zl])return!1;const s=t[zl].initial;["height","width"].forEach(e=>{const i=s[e];Es(i)?t.removeAttribute(e):t.setAttribute(e,i)});const i=s.style||{};return Object.keys(i).forEach(e=>{t.style[e]=i[e]}),t.width=t.width,delete t[zl],!0}addEventListener(e,t,s){this.removeEventListener(e,t);const i=e.$proxies||(e.$proxies={}),n={attach:Gl,detach:Jl,resize:nr},a=n[t]||or;i[t]=a(e,t,s)}removeEventListener(e,t){const s=e.$proxies||(e.$proxies={}),i=s[t];if(!i)return;const n={attach:ar,detach:ar,resize:ar},a=n[t]||Kl;a(e,t,i),s[t]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,s,i){return Ra(e,t,s,i)}isAttached(e){const t=e&&Ma(e);return!(!t||!t.isConnected)}}function rr(e){return!Ta()||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?Bl:lr}class cr{constructor(){(0,Bt.A)(this,"x",void 0),(0,Bt.A)(this,"y",void 0),(0,Bt.A)(this,"active",!1),(0,Bt.A)(this,"options",void 0),(0,Bt.A)(this,"$animations",void 0)}tooltipPosition(e){const{x:t,y:s}=this.getProps(["x","y"],e);return{x:t,y:s}}hasValue(){return ki(this.x)&&ki(this.y)}getProps(e,t){const s=this.$animations;if(!t||!s)return this;const i={};return e.forEach(e=>{i[e]=s[e]&&s[e].active()?s[e]._to:this[e]}),i}}function dr(e,t){const s=e.options.ticks,i=hr(e),n=Math.min(s.maxTicksLimit||i,i),a=s.major.enabled?pr(t):[],o=a.length,l=a[0],r=a[o-1],c=[];if(o>n)return gr(t,c,a,o/n),c;const d=ur(a,t,n);if(o>0){let e,s;const i=o>1?Math.round((r-l)/(o-1)):null;for(fr(t,c,d,Es(i)?0:l-i,l),e=0,s=o-1;en)return e}return Math.max(n,1)}function pr(e){const t=[];let s,i;for(s=0,i=e.length;s"left"===e?"right":"right"===e?"left":e,yr=(e,t,s)=>"top"===t||"left"===t?e[t]+s:e[t]-s,xr=(e,t)=>Math.min(t||e,e);function vr(e,t){const s=[],i=e.length/t,n=e.length;let a=0;for(;ao+l)))return c}function _r(e,t){js(e,e=>{const s=e.gc,i=s.length/2;let n;if(i>t){for(n=0;ni?i:s,i=n&&s>i?s:i,{min:Rs(s,Rs(i,s)),max:Rs(i,Rs(s,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){const t=this._labelItems||(this._labelItems=this._computeLabelItems(e));return t}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Ns(this.options.beforeUpdate,[this])}update(e,t,s){const{beginAtZero:i,grace:n,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Qn(this,n,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=o=n||s<=1||!this.isHorizontal())return void(this.labelRotation=i);const c=this._getLabelSizes(),d=c.widest.width,h=c.highest.height,u=$i(this.chart.width-d,0,this.maxWidth);a=e.offset?this.maxWidth/s:u/(s-1),d+6>a&&(a=u/(s-(e.offset?.5:1)),o=this.maxHeight-wr(e.grid)-t.padding-Cr(e.title,this.chart.options.font),l=Math.sqrt(d*d+h*h),r=Si(Math.min(Math.asin($i((c.highest.height+6)/a,-1,1)),Math.asin($i(o/l,-1,1))-Math.asin($i(h/l,-1,1)))),r=Math.max(i,Math.min(n,r))),this.labelRotation=r}afterCalculateLabelRotation(){Ns(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Ns(this.options.beforeFit,[this])}fit(){const e={width:0,height:0},{chart:t,options:{ticks:s,title:i,grid:n}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){const a=Cr(i,t.options.font);if(o?(e.width=this.maxWidth,e.height=wr(n)+a):(e.height=this.maxHeight,e.width=wr(n)+a),s.display&&this.ticks.length){const{first:t,last:i,widest:n,highest:a}=this._getLabelSizes(),l=2*s.padding,r=Ci(this.labelRotation),c=Math.cos(r),d=Math.sin(r);if(o){const t=s.mirror?0:d*n.width+c*a.height;e.height=Math.min(this.maxHeight,e.height+t+l)}else{const t=s.mirror?0:c*n.width+d*a.height;e.width=Math.min(this.maxWidth,e.width+t+l)}this._calculatePadding(t,i,d,c)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,s,i){const{ticks:{align:n,padding:a},position:o}=this.options,l=0!==this.labelRotation,r="top"!==o&&"x"===this.axis;if(this.isHorizontal()){const o=this.getPixelForTick(0)-this.left,c=this.right-this.getPixelForTick(this.ticks.length-1);let d=0,h=0;l?r?(d=i*e.width,h=s*t.height):(d=s*e.height,h=i*t.width):"start"===n?h=t.width:"end"===n?d=e.width:"inner"!==n&&(d=e.width/2,h=t.width/2),this.paddingLeft=Math.max((d-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((h-c+a)*this.width/(this.width-c),0)}else{let s=t.height/2,i=e.height/2;"start"===n?(s=0,i=e.height):"end"===n&&(s=t.height,i=0),this.paddingTop=s+a,this.paddingBottom=i+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Ns(this.options.afterFit,[this])}isHorizontal(){const{axis:e,position:t}=this.options;return"top"===t||"bottom"===t||"x"===e}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){let t,s;for(this.beforeTickToLabelConversion(),this.generateTickLabels(e),t=0,s=e.length;t({width:a[e]||0,height:o[e]||0});return{first:w(0),last:w(t-1),widest:w(k),highest:w(_),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){const t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);const t=this._startPixel+e*this._length;return Li(this._alignToPixels?Sn(this.chart,t,0):t)}getDecimalForPixel(e){const t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){const t=this.ticks||[];if(e>=0&&eo*i?o/s:l/i:l*i0}_computeGridLineItems(e){const t=this.axis,s=this.chart,i=this.options,{grid:n,position:a,border:o}=i,l=n.offset,r=this.isHorizontal(),c=this.ticks,d=c.length+(l?1:0),h=wr(n),u=[],p=o.setContext(this.getContext()),g=p.display?p.width:0,f=g/2,m=function(e){return Sn(s,e,g)};let b,y,x,v,k,_,w,C,S,F,T,M;if("top"===a)b=m(this.bottom),_=this.bottom-h,C=b-f,F=m(e.top)+f,M=e.bottom;else if("bottom"===a)b=m(this.top),F=e.top,M=m(e.bottom)-f,_=b+f,C=this.top+h;else if("left"===a)b=m(this.right),k=this.right-h,w=b-f,S=m(e.left)+f,T=e.right;else if("right"===a)b=m(this.left),S=e.left,T=m(e.right)-f,k=b+f,w=this.left+h;else if("x"===t){if("center"===a)b=m((e.top+e.bottom)/2+.5);else if(Us(a)){const e=Object.keys(a)[0],t=a[e];b=m(this.chart.scales[e].getPixelForValue(t))}F=e.top,M=e.bottom,_=b+f,C=_+h}else if("y"===t){if("center"===a)b=m((e.left+e.right)/2);else if(Us(a)){const e=Object.keys(a)[0],t=a[e];b=m(this.chart.scales[e].getPixelForValue(t))}k=b-f,w=k-h,S=e.left,T=e.right}const P=Ws(i.ticks.maxTicksLimit,d),D=Math.max(1,Math.ceil(d/P));for(y=0;y0&&(a-=i/2);break}h={left:a,top:n,width:i+t.width,height:s+t.height,color:e.backdropColor}}f.push({label:x,font:C,textOffset:T,options:{rotation:g,color:s,strokeColor:l,strokeWidth:c,textAlign:u,textBaseline:M,translation:[v,k],backdrop:h}})}return f}_getXAxisLabelAlignment(){const{position:e,ticks:t}=this.options,s=-Ci(this.labelRotation);if(s)return"top"===e?"left":"right";let i="center";return"start"===t.align?i="left":"end"===t.align?i="right":"inner"===t.align&&(i="inner"),i}_getYAxisLabelAlignment(e){const{position:t,ticks:{crossAlign:s,mirror:i,padding:n}}=this.options,a=this._getLabelSizes(),o=e+n,l=a.widest.width;let r,c;return"left"===t?i?(c=this.right+n,"near"===s?r="left":"center"===s?(r="center",c+=l/2):(r="right",c+=l)):(c=this.right-o,"near"===s?r="right":"center"===s?(r="center",c-=l/2):(r="left",c=this.left)):"right"===t?i?(c=this.left+n,"near"===s?r="right":"center"===s?(r="center",c-=l/2):(r="left",c-=l)):(c=this.left+o,"near"===s?r="left":"center"===s?(r="center",c+=l/2):(r="right",c=this.right)):r="right",{textAlign:r,x:c}}_computeLabelArea(){if(this.options.ticks.mirror)return;const e=this.chart,t=this.options.position;return"left"===t||"right"===t?{top:0,left:this.left,bottom:e.height,right:this.right}:"top"===t||"bottom"===t?{top:this.top,left:0,bottom:this.bottom,right:e.width}:void 0}drawBackground(){const{ctx:e,options:{backgroundColor:t},left:s,top:i,width:n,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(s,i,n,a),e.restore())}getLineWidthForValue(e){const t=this.options.grid;if(!this._isVisible()||!t.display)return 0;const s=this.ticks,i=s.findIndex(t=>t.value===e);if(i>=0){const e=t.setContext(this.getContext(i));return e.lineWidth}return 0}drawGrid(e){const t=this.options.grid,s=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e));let n,a;const o=(e,t,i)=>{i.width&&i.color&&(s.save(),s.lineWidth=i.width,s.strokeStyle=i.color,s.setLineDash(i.borderDash||[]),s.lineDashOffset=i.borderDashOffset,s.beginPath(),s.moveTo(e.x,e.y),s.lineTo(t.x,t.y),s.stroke(),s.restore())};if(t.display)for(n=0,a=i.length;n{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:t,draw:e=>{this.drawLabels(e)}}]:[{z:t,draw:e=>{this.draw(e)}}]}getMatchingVisibleMetas(e){const t=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",i=[];let n,a;for(n=0,a=t.length;n{const i=s.split("."),n=i.pop(),a=[e].concat(i).join("."),o=t[s].split("."),l=o.pop(),r=o.join(".");kn.route(a,n,r,l)})}function Lr(e){return"id"in e&&"defaults"in e}class Vr{constructor(){this.controllers=new Dr(Wo,"datasets",!0),this.elements=new Dr(cr,"elements"),this.plugins=new Dr(Object,"plugins"),this.scales=new Dr(Pr,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each("register",e)}remove(...e){this._each("unregister",e)}addControllers(...e){this._each("register",e,this.controllers)}addElements(...e){this._each("register",e,this.elements)}addPlugins(...e){this._each("register",e,this.plugins)}addScales(...e){this._each("register",e,this.scales)}getController(e){return this._get(e,this.controllers,"controller")}getElement(e){return this._get(e,this.elements,"element")}getPlugin(e){return this._get(e,this.plugins,"plugin")}getScale(e){return this._get(e,this.scales,"scale")}removeControllers(...e){this._each("unregister",e,this.controllers)}removeElements(...e){this._each("unregister",e,this.elements)}removePlugins(...e){this._each("unregister",e,this.plugins)}removeScales(...e){this._each("unregister",e,this.scales)}_each(e,t,s){[...t].forEach(t=>{const i=s||this._getRegistryForType(t);s||i.isForType(t)||i===this.plugins&&t.id?this._exec(e,i,t):js(t,t=>{const i=s||this._getRegistryForType(t);this._exec(e,i,t)})})}_exec(e,t,s){const i=si(e);Ns(s["before"+i],[],s),t[e](s),Ns(s["after"+i],[],s)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(i(t,s),e,"stop"),this._notify(i(s,t),e,"start")}}function Ur(e){const t={},s=[],i=Object.keys(Er.plugins.items);for(let a=0;a1&&jr(e[0].toLowerCase());if(t)return t}throw new Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function Xr(e,t,s){if(s[t+"AxisID"]===e)return{axis:t}}function Kr(e,t){if(t.data&&t.data.datasets){const s=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(s.length)return Xr(e,"x",s[0])||Xr(e,"y",s[0])}return{}}function Qr(e,t){const s=mn[e.type]||{scales:{}},i=t.scales||{},n=Br(e.type,t),a=Object.create(null);return Object.keys(i).forEach(t=>{const o=i[t];if(!Us(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const l=qr(t,o,Kr(t,e),kn.scales[o.type]),r=Nr(l,n),c=s.scales||{};a[t]=Ys(Object.create(null),[{axis:l},o,c[l],c[r]])}),e.data.datasets.forEach(s=>{const n=s.type||e.type,o=s.indexAxis||Br(n,t),l=mn[n]||{},r=l.scales||{};Object.keys(r).forEach(e=>{const t=zr(e,o),n=s[t+"AxisID"]||t;a[n]=a[n]||Object.create(null),Ys(a[n],[{axis:t},i[n],r[e]])})}),Object.keys(a).forEach(e=>{const t=a[e];Ys(t,[kn.scales[t.type],kn.scale])}),a}function Yr(e){const t=e.options||(e.options={});t.plugins=Ws(t.plugins,{}),t.scales=Qr(e,t)}function Gr(e){return e=e||{},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function Jr(e){return e=e||{},e.data=Gr(e.data),Yr(e),e}const Zr=new Map,ec=new Set;function tc(e,t){let s=Zr.get(e);return s||(s=t(),Zr.set(e,s),ec.add(s)),s}const sc=(e,t,s)=>{const i=ti(t,s);void 0!==i&&e.add(i)};class ic{constructor(e){this._config=Jr(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=Gr(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){const e=this._config;this.clearCache(),Yr(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return tc(e,()=>[[`datasets.${e}`,""]])}datasetAnimationScopeKeys(e,t){return tc(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,""]])}datasetElementScopeKeys(e,t){return tc(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,""]])}pluginScopeKeys(e){const t=e.id,s=this.type;return tc(`${s}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){const s=this._scopeCache;let i=s.get(e);return i&&!t||(i=new Map,s.set(e,i)),i}getOptionScopes(e,t,s){const{options:i,type:n}=this,a=this._cachedScopes(e,s),o=a.get(t);if(o)return o;const l=new Set;t.forEach(t=>{e&&(l.add(e),t.forEach(t=>sc(l,e,t))),t.forEach(e=>sc(l,i,e)),t.forEach(e=>sc(l,mn[n]||{},e)),t.forEach(e=>sc(l,kn,e)),t.forEach(e=>sc(l,bn,e))});const r=Array.from(l);return 0===r.length&&r.push(Object.create(null)),ec.has(t)&&a.set(t,r),r}chartOptionScopes(){const{options:e,type:t}=this;return[e,mn[t]||{},kn.datasets[t]||{},{type:t},kn,bn]}resolveNamedOptions(e,t,s,i=[""]){const n={$shared:!0},{resolver:a,subPrefixes:o}=nc(this._resolverCache,e,i);let l=a;if(oc(a,t)){n.$shared=!1,s=ni(s)?s():s;const t=this.createResolver(e,s,o);l=Jn(a,s,t)}for(const r of t)n[r]=l[r];return n}createResolver(e,t,s=[""],i){const{resolver:n}=nc(this._resolverCache,e,s);return Us(t)?Jn(n,t,void 0,i):n}}function nc(e,t,s){let i=e.get(t);i||(i=new Map,e.set(t,i));const n=s.join();let a=i.get(n);if(!a){const e=Gn(t,s);a={resolver:e,subPrefixes:s.filter(e=>!e.toLowerCase().includes("hover"))},i.set(n,a)}return a}const ac=e=>Us(e)&&Object.getOwnPropertyNames(e).some(t=>ni(e[t]));function oc(e,t){const{isScriptable:s,isIndexable:i}=Zn(e);for(const n of t){const t=s(n),a=i(n),o=(a||t)&&e[n];if(t&&(ni(o)||ac(o))||a&&Is(o))return!0}return!1}var lc="4.5.1";const rc=["top","bottom","left","right","chartArea"];function cc(e,t){return"top"===e||"bottom"===e||-1===rc.indexOf(e)&&"x"===t}function dc(e,t){return function(s,i){return s[e]===i[e]?s[t]-i[t]:s[e]-i[e]}}function hc(e){const t=e.chart,s=t.options.animation;t.notifyPlugins("afterRender"),Ns(s&&s.onComplete,[e],t)}function uc(e){const t=e.chart,s=t.options.animation;Ns(s&&s.onProgress,[e],t)}function pc(e){return Ta()&&"string"===typeof e?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}const gc={},fc=e=>{const t=pc(e);return Object.values(gc).filter(e=>e.canvas===t).pop()};function mc(e,t,s){const i=Object.keys(e);for(const n of i){const i=+n;if(i>=t){const a=e[n];delete e[n],(s>0||i>t)&&(e[i+s]=a)}}}function bc(e,t,s,i){return s&&"mouseout"!==e.type?i?t:e:null}class yc{static register(...e){Er.add(...e),xc()}static unregister(...e){Er.remove(...e),xc()}constructor(e,t){const s=this.config=new ic(t),i=pc(e),n=fc(i);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||rr(i)),this.platform.updateConfig(s);const o=this.platform.acquireContext(i,a.aspectRatio),l=o&&o.canvas,r=l&&l.height,c=l&&l.width;this.id=Vs(),this.ctx=o,this.canvas=l,this.width=c,this.height=r,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ir,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Hi(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],gc[this.id]=this,o&&l?(go.listen(this,"complete",hc),go.listen(this,"progress",uc),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:e,maintainAspectRatio:t},width:s,height:i,_aspectRatio:n}=this;return Es(e)?t&&n?n:i?s/i:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Er}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Wa(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Fn(this.canvas,this.ctx),this}stop(){return go.stop(this),this}resize(e,t){go.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){const s=this.options,i=this.canvas,n=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(i,e,t,n),o=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Wa(this,o,!0)&&(this.notifyPlugins("resize",{size:a}),Ns(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options,t=e.scales||{};js(t,(e,t)=>{e.id=t})}buildOrUpdateScales(){const e=this.options,t=e.scales,s=this.scales,i=Object.keys(s).reduce((e,t)=>(e[t]=!1,e),{});let n=[];t&&(n=n.concat(Object.keys(t).map(e=>{const s=t[e],i=qr(e,s),n="r"===i,a="x"===i;return{options:s,dposition:n?"chartArea":a?"bottom":"left",dtype:n?"radialLinear":a?"category":"linear"}}))),js(n,t=>{const n=t.options,a=n.id,o=qr(a,n),l=Ws(n.type,t.dtype);void 0!==n.position&&cc(n.position,o)===cc(t.dposition)||(n.position=t.dposition),i[a]=!0;let r=null;if(a in s&&s[a].type===l)r=s[a];else{const e=Er.getScale(l);r=new e({id:a,type:l,ctx:this.ctx,chart:this}),s[r.id]=r}r.init(n,e)}),js(i,(e,t)=>{e||delete s[t]}),js(s,e=>{Rl.configure(this,e,e.options),Rl.addBox(this,e)})}_updateMetasets(){const e=this._metasets,t=this.data.datasets.length,s=e.length;if(e.sort((e,t)=>e.index-t.index),s>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,s)=>{0===t.filter(t=>t===e._dataset).length&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const e=[],t=this.data.datasets;let s,i;for(this._removeUnreferencedMetasets(),s=0,i=t.length;s{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){const t=this.config;t.update();const s=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let r=0,c=this.data.datasets.length;r{e.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(dc("z","_idx"));const{_active:o,_lastEvent:l}=this;l?this._eventHandler(l,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){js(this.scales,e=>{Rl.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const e=this.options,t=new Set(Object.keys(this._listeners)),s=new Set(e.events);ai(t,s)&&!!this._responsiveListeners===e.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(const{method:s,start:i,count:n}of t){const t="_removeElements"===s?-n:n;mc(e,i,t)}}_getUniformDataChanges(){const e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];const t=this.data.datasets.length,s=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+","+e.splice(1).join(","))),i=s(0);for(let n=1;ne.split(",")).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;Rl.update(this,this.width,this.height,e);const t=this.chartArea,s=t.width<=0||t.height<=0;this._layers=[],js(this.boxes,e=>{s&&"chartArea"===e.position||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){const t=this.ctx,s={meta:e,index:e.index,cancelable:!0},i=uo(this,e);!1!==this.notifyPlugins("beforeDatasetDraw",s)&&(i&&Dn(t,i),e.controller.draw(),i&&An(t),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(e){return Pn(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,s,i){const n=_l.modes[t];return"function"===typeof n?n(this,e,s,i):[]}getDatasetMeta(e){const t=this.data.datasets[e],s=this._metasets;let i=s.filter(e=>e&&e._dataset===t).pop();return i||(i={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},s.push(i)),i}getContext(){return this.$context||(this.$context=Yn(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){const t=this.data.datasets[e];if(!t)return!1;const s=this.getDatasetMeta(e);return"boolean"===typeof s.hidden?!s.hidden:!t.hidden}setDatasetVisibility(e,t){const s=this.getDatasetMeta(e);s.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,s){const i=s?"show":"hide",n=this.getDatasetMeta(e),a=n.controller._resolveAnimations(void 0,i);ii(t)?(n.data[t].hidden=!s,this.update()):(this.setDatasetVisibility(e,s),a.update(n,{visible:s}),this.update(t=>t.datasetIndex===e?i:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){const t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),go.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,s,i),e[s]=i},i=(e,t,s)=>{e.offsetX=t,e.offsetY=s,this._eventHandler(e)};js(this.options.events,e=>s(e,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const e=this._responsiveListeners,t=this.platform,s=(s,i)=>{t.addEventListener(this,s,i),e[s]=i},i=(s,i)=>{e[s]&&(t.removeEventListener(this,s,i),delete e[s])},n=(e,t)=>{this.canvas&&this.resize(e,t)};let a;const o=()=>{i("attach",o),this.attached=!0,this.resize(),s("resize",n),s("detach",a)};a=()=>{this.attached=!1,i("resize",n),this._stop(),this._resize(0,0),s("attach",o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){js(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},js(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,s){const i=s?"set":"remove";let n,a,o,l;for("dataset"===t&&(n=this.getDatasetMeta(e[0].datasetIndex),n.controller["_"+i+"DatasetHoverStyle"]()),o=0,l=e.length;o{const s=this.getDatasetMeta(e);if(!s)throw new Error("No dataset found at index "+e);return{datasetIndex:e,element:s.data[t],index:t}}),i=!Hs(s,t);i&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,t))}notifyPlugins(e,t,s){return this._plugins.notify(this,e,t,s)}isPluginEnabled(e){return 1===this._plugins._cache.filter(t=>t.plugin.id===e).length}_updateHoverStyles(e,t,s){const i=this.options.hover,n=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=n(t,e),o=s?e:n(e,t);a.length&&this.updateHoverStyle(a,i.mode,!1),o.length&&i.mode&&this.updateHoverStyle(o,i.mode,!0)}_eventHandler(e,t){const s={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},i=t=>(t.options.events||this.options.events).includes(e.native.type);if(!1===this.notifyPlugins("beforeEvent",s,i))return;const n=this._handleEvent(e,t,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,i),(n||s.changed)&&this.render(),this}_handleEvent(e,t,s){const{_active:i=[],options:n}=this,a=t,o=this._getActiveElements(e,i,s,a),l=oi(e),r=bc(e,this._lastEvent,s,l);s&&(this._lastEvent=null,Ns(n.onHover,[e,o,this],this),l&&Ns(n.onClick,[e,o,this],this));const c=!Hs(o,i);return(c||t)&&(this._active=o,this._updateHoverStyles(o,i,t)),this._lastEvent=r,c}_getActiveElements(e,t,s,i){if("mouseout"===e.type)return[];if(!s)return t;const n=this.options.hover;return this.getElementsAtEventForMode(e,n.mode,n,i)}}function xc(){return js(yc.instances,e=>e._plugins.invalidate())}function vc(e,t,s){const{startAngle:i,x:n,y:a,outerRadius:o,innerRadius:l,options:r}=t,{borderWidth:c,borderJoinStyle:d}=r,h=Math.min(c/o,Di(i-s));if(e.beginPath(),e.arc(n,a,o-c/2,i+h/2,s-h/2),l>0){const t=Math.min(c/l,Di(i-s));e.arc(n,a,l+c/2,s-t/2,i+t/2,!0)}else{const t=Math.min(c/2,o*Di(i-s));if("round"===d)e.arc(n,a,t,s-li/2,i+li/2,!0);else if("bevel"===d){const o=2*t*t,l=-o*Math.cos(s+li/2)+n,r=-o*Math.sin(s+li/2)+a,c=o*Math.cos(i+li/2)+n,d=o*Math.sin(i+li/2)+a;e.lineTo(l,r),e.lineTo(c,d)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip("evenodd")}function kc(e,t,s){const{startAngle:i,pixelMargin:n,x:a,y:o,outerRadius:l,innerRadius:r}=t;let c=n/l;e.beginPath(),e.arc(a,o,l,i-c,s+c),r>n?(c=n/r,e.arc(a,o,r,s+c,i-c,!0)):e.arc(a,o,n,s+ui,i-ui),e.closePath(),e.clip()}function _c(e){return Nn(e,["outerStart","outerEnd","innerStart","innerEnd"])}function wc(e,t,s,i){const n=_c(e.options.borderRadius),a=(s-t)/2,o=Math.min(a,i*t/2),l=e=>{const t=(s-Math.min(a,e))*i/2;return $i(e,0,Math.min(a,t))};return{outerStart:l(n.outerStart),outerEnd:l(n.outerEnd),innerStart:$i(n.innerStart,0,o),innerEnd:$i(n.innerEnd,0,o)}}function Cc(e,t,s,i){return{x:s+e*Math.cos(t),y:i+e*Math.sin(t)}}function Sc(e,t,s,i,n,a){const{x:o,y:l,startAngle:r,pixelMargin:c,innerRadius:d}=t,h=Math.max(t.outerRadius+i+s-c,0),u=d>0?d+i+s+c:0;let p=0;const g=n-r;if(i){const e=d>0?d-i:0,t=h>0?h-i:0,s=(e+t)/2,n=0!==s?g*s/(s+i):g;p=(g-n)/2}const f=Math.max(.001,g*h-s/li)/h,m=(g-f)/2,b=r+m+p,y=n-m-p,{outerStart:x,outerEnd:v,innerStart:k,innerEnd:_}=wc(t,u,h,y-b),w=h-x,C=h-v,S=b+x/w,F=y-v/C,T=u+k,M=u+_,P=b+k/T,D=y-_/M;if(e.beginPath(),a){const t=(S+F)/2;if(e.arc(o,l,h,S,t),e.arc(o,l,h,t,F),v>0){const t=Cc(C,F,o,l);e.arc(t.x,t.y,v,F,y+ui)}const s=Cc(M,y,o,l);if(e.lineTo(s.x,s.y),_>0){const t=Cc(M,D,o,l);e.arc(t.x,t.y,_,y+ui,D+Math.PI)}const i=(y-_/u+(b+k/u))/2;if(e.arc(o,l,u,y-_/u,i,!0),e.arc(o,l,u,i,b+k/u,!0),k>0){const t=Cc(T,P,o,l);e.arc(t.x,t.y,k,P+Math.PI,b-ui)}const n=Cc(w,b,o,l);if(e.lineTo(n.x,n.y),x>0){const t=Cc(w,S,o,l);e.arc(t.x,t.y,x,b-ui,S)}}else{e.moveTo(o,l);const t=Math.cos(S)*h+o,s=Math.sin(S)*h+l;e.lineTo(t,s);const i=Math.cos(F)*h+o,n=Math.sin(F)*h+l;e.lineTo(i,n)}e.closePath()}function Fc(e,t,s,i,n){const{fullCircles:a,startAngle:o,circumference:l}=t;let r=t.endAngle;if(a){Sc(e,t,s,i,r,n);for(let t=0;t=li&&0===p&&"miter"!==d&&vc(e,t,f),a||(Sc(e,t,s,i,f,n),e.stroke())}(0,Bt.A)(yc,"defaults",kn),(0,Bt.A)(yc,"instances",gc),(0,Bt.A)(yc,"overrides",mn),(0,Bt.A)(yc,"registry",Er),(0,Bt.A)(yc,"version",lc),(0,Bt.A)(yc,"getChart",fc);class Mc extends cr{constructor(e){super(),(0,Bt.A)(this,"circumference",void 0),(0,Bt.A)(this,"endAngle",void 0),(0,Bt.A)(this,"fullCircles",void 0),(0,Bt.A)(this,"innerRadius",void 0),(0,Bt.A)(this,"outerRadius",void 0),(0,Bt.A)(this,"pixelMargin",void 0),(0,Bt.A)(this,"startAngle",void 0),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,s){const i=this.getProps(["x","y"],s),{angle:n,distance:a}=Ti(i,{x:e,y:t}),{startAngle:o,endAngle:l,innerRadius:r,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],s),h=(this.options.spacing+this.options.borderWidth)/2,u=Ws(d,l-o),p=Ai(n,o,l)&&o!==l,g=u>=ri||p,f=Vi(a,r+h,c+h);return g&&f}getCenterPoint(e){const{x:t,y:s,startAngle:i,endAngle:n,innerRadius:a,outerRadius:o}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:l,spacing:r}=this.options,c=(i+n)/2,d=(a+o+r+l)/2;return{x:t+Math.cos(c)*d,y:s+Math.sin(c)*d}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:t,circumference:s}=this,i=(t.offset||0)/4,n=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin="inner"===t.borderAlign?.33:0,this.fullCircles=s>ri?Math.floor(s/ri):0,0===s||this.innerRadius<0||this.outerRadius<0)return;e.save();const o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*i,Math.sin(o)*i);const l=1-Math.sin(Math.min(li,s||0)),r=i*l;e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Fc(e,this,r,n,a),Tc(e,this,r,n,a),e.restore()}}function Pc(e,t,s=t){e.lineCap=Ws(s.borderCapStyle,t.borderCapStyle),e.setLineDash(Ws(s.borderDash,t.borderDash)),e.lineDashOffset=Ws(s.borderDashOffset,t.borderDashOffset),e.lineJoin=Ws(s.borderJoinStyle,t.borderJoinStyle),e.lineWidth=Ws(s.borderWidth,t.borderWidth),e.strokeStyle=Ws(s.borderColor,t.borderColor)}function Dc(e,t,s){e.lineTo(s.x,s.y)}function Ac(e){return e.stepped?$n:e.tension||"monotone"===e.cubicInterpolationMode?Ln:Dc}function $c(e,t,s={}){const i=e.length,{start:n=0,end:a=i-1}=s,{start:o,end:l}=t,r=Math.max(n,o),c=Math.min(a,l),d=nl&&a>l;return{count:i,start:r,loop:t.loop,ilen:c(o+(c?l-e:e))%a,x=()=>{p!==g&&(e.lineTo(m,g),e.lineTo(m,p),e.lineTo(m,f))};for(r&&(h=n[y(0)],e.moveTo(h.x,h.y)),d=0;d<=l;++d){if(h=n[y(d)],h.skip)continue;const t=h.x,s=h.y,i=0|t;i===u?(sg&&(g=s),m=(b*m+t)/++b):(x(),e.lineTo(t,s),u=i,b=0,p=g=s),f=s}x()}function Ec(e){const t=e.options,s=t.borderDash&&t.borderDash.length,i=!e._decimated&&!e._loop&&!t.tension&&"monotone"!==t.cubicInterpolationMode&&!t.stepped&&!s;return i?Vc:Lc}function Ic(e){return e.stepped?ja:e.tension||"monotone"===e.cubicInterpolationMode?Ha:Na}function Uc(e,t,s,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,s,i)&&n.closePath()),Pc(e,t.options),e.stroke(n)}function Oc(e,t,s,i){const{segments:n,options:a}=t,o=Ec(t);for(const l of n)Pc(e,a,l.style),e.beginPath(),o(e,t,l,{start:s,end:s+i-1})&&e.closePath(),e.stroke()}(0,Bt.A)(Mc,"id","arc"),(0,Bt.A)(Mc,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),(0,Bt.A)(Mc,"defaultRoutes",{backgroundColor:"backgroundColor"}),(0,Bt.A)(Mc,"descriptors",{_scriptable:!0,_indexable:e=>"borderDash"!==e});const Rc="function"===typeof Path2D;function Wc(e,t,s,i){Rc&&!t.options.segment?Uc(e,t,s,i):Oc(e,t,s,i)}class Bc extends cr{constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){const s=this.options;if((s.tension||"monotone"===s.cubicInterpolationMode)&&!s.stepped&&!this._pointsUpdated){const i=s.spanGaps?this._loop:this._fullLoop;Fa(this._points,s,e,i,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=no(this,this.options.segment))}first(){const e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){const e=this.segments,t=this.points,s=e.length;return s&&t[e[s-1].end]}interpolate(e,t){const s=this.options,i=e[t],n=this.points,a=to(this,{property:t,start:i,end:i});if(!a.length)return;const o=[],l=Ic(s);let r,c;for(r=0,c=a.length;r"borderDash"!==e&&"fill"!==e});class Nc extends cr{constructor(e){super(),(0,Bt.A)(this,"parsed",void 0),(0,Bt.A)(this,"skip",void 0),(0,Bt.A)(this,"stop",void 0),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,t,s){const i=this.options,{x:n,y:a}=this.getProps(["x","y"],s);return Math.pow(e-n,2)+Math.pow(t-a,2){t=id(e,t,n);const o=n[e],l=n[t];null!==i?(a.push({x:o.x,y:i}),a.push({x:l.x,y:i})):null!==s&&(a.push({x:s,y:o.y}),a.push({x:s,y:l.y}))}),a}function id(e,t,s){for(;t>e;t--){const e=s[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function nd(e,t,s,i){return e&&t?i(e[s],t[s]):e?e[s]:t?t[s]:0}function ad(e,t){let s=[],i=!1;return Is(e)?(i=!0,s=e):s=sd(e,t),s.length?new Bc({points:s,options:{tension:0},_loop:i,_fullLoop:i}):null}function od(e){return e&&!1!==e.fill}function ld(e,t,s){const i=e[t];let n=i.fill;const a=[t];let o;if(!s)return n;while(!1!==n&&-1===a.indexOf(n)){if(!Os(n))return n;if(o=e[n],!o)return!1;if(o.visible)return n;a.push(n),n=o.fill}return!1}function rd(e,t,s){const i=ud(e);if(Us(i))return!isNaN(i.value)&&i;let n=parseFloat(i);return Os(n)&&Math.floor(n)===n?cd(i[0],t,n,s):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function cd(e,t,s,i){return"-"!==e&&"+"!==e||(s=t+s),!(s===t||s<0||s>=i)&&s}function dd(e,t){let s=null;return"start"===e?s=t.bottom:"end"===e?s=t.top:Us(e)?s=t.getPixelForValue(e.value):t.getBasePixel&&(s=t.getBasePixel()),s}function hd(e,t,s){let i;return i="start"===e?s:"end"===e?t.options.reverse?t.min:t.max:Us(e)?e.value:t.getBaseValue(),i}function ud(e){const t=e.options,s=t.fill;let i=Ws(s&&s.target,s);return void 0===i&&(i=!!t.backgroundColor),!1!==i&&null!==i&&(!0===i?"origin":i)}function pd(e){const{scale:t,index:s,line:i}=e,n=[],a=i.segments,o=i.points,l=gd(t,s);l.push(ad({x:null,y:t.bottom},i));for(let r=0;r=0;--o){const t=n[o].$filler;t&&(t.line.updateControlPoints(a,t.axis),i&&t.fill&&wd(e.ctx,t,a))}},beforeDatasetsDraw(e,t,s){if("beforeDatasetsDraw"!==s.drawTime)return;const i=e.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){const t=i[n].$filler;od(t)&&wd(e.ctx,t,e.chartArea)}},beforeDatasetDraw(e,t,s){const i=t.meta.$filler;od(i)&&"beforeDatasetDraw"===s.drawTime&&wd(e.ctx,i,e.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Ad=(e,t)=>{let{boxHeight:s=t,boxWidth:i=t}=e;return e.usePointStyle&&(s=Math.min(s,t),i=e.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:s,itemHeight:Math.max(t,s)}},$d=(e,t)=>null!==e&&null!==t&&e.datasetIndex===t.datasetIndex&&e.index===t.index;class Ld extends cr{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,s){this.maxWidth=e,this.maxHeight=t,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const e=this.options.labels||{};let t=Ns(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,s)=>e.sort(t,s,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){const{options:e,ctx:t}=this;if(!e.display)return void(this.width=this.height=0);const s=e.labels,i=Xn(s.font),n=i.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:l}=Ad(s,n);let r,c;t.font=i.string,this.isHorizontal()?(r=this.maxWidth,c=this._fitRows(a,n,o,l)+10):(c=this.maxHeight,r=this._fitCols(a,i,o,l)+10),this.width=Math.min(r,e.maxWidth||this.maxWidth),this.height=Math.min(c,e.maxHeight||this.maxHeight)}_fitRows(e,t,s,i){const{ctx:n,maxWidth:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.lineWidths=[0],c=i+o;let d=e;n.textAlign="left",n.textBaseline="middle";let h=-1,u=-c;return this.legendItems.forEach((e,p)=>{const g=s+t/2+n.measureText(e.text).width;(0===p||r[r.length-1]+g+2*o>a)&&(d+=c,r[r.length-(p>0?0:1)]=0,u+=c,h++),l[p]={left:0,top:u,row:h,width:g,height:i},r[r.length-1]+=g+o}),d}_fitCols(e,t,s,i){const{ctx:n,maxHeight:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.columnSizes=[],c=a-e;let d=o,h=0,u=0,p=0,g=0;return this.legendItems.forEach((e,a)=>{const{itemWidth:f,itemHeight:m}=Vd(s,t,n,e,i);a>0&&u+m+2*o>c&&(d+=h+o,r.push({width:h,height:u}),p+=h+o,g++,h=u=0),l[a]={left:p,top:u,col:g,width:f,height:m},h=Math.max(h,f),u+=m+o}),d+=h,r.push({width:h,height:u}),d}adjustHitBoxes(){if(!this.options.display)return;const e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:s,labels:{padding:i},rtl:n}}=this,a=Ka(n,this.left,this.width);if(this.isHorizontal()){let n=0,o=Xi(s,this.left+i,this.right-this.lineWidths[n]);for(const l of t)n!==l.row&&(n=l.row,o=Xi(s,this.left+i,this.right-this.lineWidths[n])),l.top+=this.top+e+i,l.left=a.leftForLtr(a.x(o),l.width),o+=l.width+i}else{let n=0,o=Xi(s,this.top+e+i,this.bottom-this.columnSizes[n].height);for(const l of t)l.col!==n&&(n=l.col,o=Xi(s,this.top+e+i,this.bottom-this.columnSizes[n].height)),l.top=o,l.left+=this.left+i,l.left=a.leftForLtr(a.x(l.left),l.width),o+=l.height+i}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const e=this.ctx;Dn(e,this),this._draw(),An(e)}}_draw(){const{options:e,columnSizes:t,lineWidths:s,ctx:i}=this,{align:n,labels:a}=e,o=kn.color,l=Ka(e.rtl,this.left,this.width),r=Xn(a.font),{padding:c}=a,d=r.size,h=d/2;let u;this.drawTitle(),i.textAlign=l.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=r.string;const{boxWidth:p,boxHeight:g,itemHeight:f}=Ad(a,d),m=function(e,t,s){if(isNaN(p)||p<=0||isNaN(g)||g<0)return;i.save();const n=Ws(s.lineWidth,1);if(i.fillStyle=Ws(s.fillStyle,o),i.lineCap=Ws(s.lineCap,"butt"),i.lineDashOffset=Ws(s.lineDashOffset,0),i.lineJoin=Ws(s.lineJoin,"miter"),i.lineWidth=n,i.strokeStyle=Ws(s.strokeStyle,o),i.setLineDash(Ws(s.lineDash,[])),a.usePointStyle){const o={radius:g*Math.SQRT2/2,pointStyle:s.pointStyle,rotation:s.rotation,borderWidth:n},r=l.xPlus(e,p/2),c=t+h;Mn(i,o,r,c,a.pointStyleWidth&&p)}else{const a=t+Math.max((d-g)/2,0),o=l.leftForLtr(e,p),r=Hn(s.borderRadius);i.beginPath(),Object.values(r).some(e=>0!==e)?On(i,{x:o,y:a,w:p,h:g,radius:r}):i.rect(o,a,p,g),i.fill(),0!==n&&i.stroke()}i.restore()},b=function(e,t,s){Un(i,s.text,e,t+f/2,r,{strikethrough:s.hidden,textAlign:l.textAlign(s.textAlign)})},y=this.isHorizontal(),x=this._computeTitleHeight();u=y?{x:Xi(n,this.left+c,this.right-s[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:Xi(n,this.top+x+c,this.bottom-t[0].height),line:0},Qa(this.ctx,e.textDirection);const v=f+c;this.legendItems.forEach((o,d)=>{i.strokeStyle=o.fontColor,i.fillStyle=o.fontColor;const g=i.measureText(o.text).width,f=l.textAlign(o.textAlign||(o.textAlign=a.textAlign)),k=p+h+g;let _=u.x,w=u.y;l.setWidth(this.width),y?d>0&&_+k+c>this.right&&(w=u.y+=v,u.line++,_=u.x=Xi(n,this.left+c,this.right-s[u.line])):d>0&&w+v>this.bottom&&(_=u.x=_+t[u.line].width+c,u.line++,w=u.y=Xi(n,this.top+x+c,this.bottom-t[u.line].height));const C=l.x(_);if(m(C,w,o),_=Ki(f,_+p+h,y?_+k:this.right,e.rtl),b(l.x(_),w,o),y)u.x+=k+c;else if("string"!==typeof o.text){const e=r.lineHeight;u.y+=Ud(o,e)+c}else u.y+=v}),Ya(this.ctx,e.textDirection)}drawTitle(){const e=this.options,t=e.title,s=Xn(t.font),i=qn(t.padding);if(!t.display)return;const n=Ka(e.rtl,this.left,this.width),a=this.ctx,o=t.position,l=s.size/2,r=i.top+l;let c,d=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),c=this.top+r,d=Xi(e.align,d,this.right-h);else{const t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);c=r+Xi(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}const u=Xi(o,d,d+h);a.textAlign=n.textAlign(qi(o)),a.textBaseline="middle",a.strokeStyle=t.color,a.fillStyle=t.color,a.font=s.string,Un(a,t.text,u,c,s)}_computeTitleHeight(){const e=this.options.title,t=Xn(e.font),s=qn(e.padding);return e.display?t.lineHeight+s.height:0}_getLegendItemAt(e,t){let s,i,n;if(Vi(e,this.left,this.right)&&Vi(t,this.top,this.bottom))for(n=this.legendHitBoxes,s=0;se.length>t.length?e:t)),t+s.size/2+i.measureText(n).width}function Id(e,t,s){let i=e;return"string"!==typeof t.text&&(i=Ud(t,s)),i}function Ud(e,t){const s=e.text?e.text.length:0;return t*s}function Od(e,t){return!("mousemove"!==e&&"mouseout"!==e||!t.onHover&&!t.onLeave)||!(!t.onClick||"click"!==e&&"mouseup"!==e)}var Rd={id:"legend",_element:Ld,start(e,t,s){const i=e.legend=new Ld({ctx:e.ctx,options:s,chart:e});Rl.configure(e,i,s),Rl.addBox(e,i)},stop(e){Rl.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,s){const i=e.legend;Rl.configure(e,i,s),i.options=s},afterUpdate(e){const t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,s){const i=t.datasetIndex,n=s.chart;n.isDatasetVisible(i)?(n.hide(i),t.hidden=!0):(n.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){const t=e.data.datasets,{labels:{usePointStyle:s,pointStyle:i,textAlign:n,color:a,useBorderRadius:o,borderRadius:l}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{const r=e.controller.getStyle(s?0:void 0),c=qn(r.borderWidth);return{text:t[e.index].label,fillStyle:r.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:(c.width+c.height)/4,strokeStyle:r.borderColor,pointStyle:i||r.pointStyle,rotation:r.rotation,textAlign:n||r.textAlign,borderRadius:o&&(l||r.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:e=>!e.startsWith("on"),labels:{_scriptable:e=>!["generateLabels","filter","sort"].includes(e)}}};new WeakMap;const Wd={average(e){if(!e.length)return!1;let t,s,i=new Set,n=0,a=0;for(t=0,s=e.length;te+t)/i.size;return{x:o,y:n/a}},nearest(e,t){if(!e.length)return!1;let s,i,n,a=t.x,o=t.y,l=Number.POSITIVE_INFINITY;for(s=0,i=e.length;s-1?e.split("\n"):e}function Nd(e,t){const{element:s,datasetIndex:i,index:n}=t,a=e.getDatasetMeta(i).controller,{label:o,value:l}=a.getLabelAndValue(n);return{chart:e,label:o,parsed:a.getParsed(n),raw:e.data.datasets[i].data[n],formattedValue:l,dataset:a.getDataset(),dataIndex:n,datasetIndex:i,element:s}}function jd(e,t){const s=e.chart.ctx,{body:i,footer:n,title:a}=e,{boxWidth:o,boxHeight:l}=t,r=Xn(t.bodyFont),c=Xn(t.titleFont),d=Xn(t.footerFont),h=a.length,u=n.length,p=i.length,g=qn(t.padding);let f=g.height,m=0,b=i.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(b+=e.beforeBody.length+e.afterBody.length,h&&(f+=h*c.lineHeight+(h-1)*t.titleSpacing+t.titleMarginBottom),b){const e=t.displayColors?Math.max(l,r.lineHeight):r.lineHeight;f+=p*e+(b-p)*r.lineHeight+(b-1)*t.bodySpacing}u&&(f+=t.footerMarginTop+u*d.lineHeight+(u-1)*t.footerSpacing);let y=0;const x=function(e){m=Math.max(m,s.measureText(e).width+y)};return s.save(),s.font=c.string,js(e.title,x),s.font=r.string,js(e.beforeBody.concat(e.afterBody),x),y=t.displayColors?o+2+t.boxPadding:0,js(i,e=>{js(e.before,x),js(e.lines,x),js(e.after,x)}),y=0,s.font=d.string,js(e.footer,x),s.restore(),m+=g.width,{width:m,height:f}}function Hd(e,t){const{y:s,height:i}=t;return se.height-i/2?"bottom":"center"}function qd(e,t,s,i){const{x:n,width:a}=i,o=s.caretSize+s.caretPadding;return"left"===e&&n+a+o>t.width||("right"===e&&n-a-o<0||void 0)}function Xd(e,t,s,i){const{x:n,width:a}=s,{width:o,chartArea:{left:l,right:r}}=e;let c="center";return"center"===i?c=n<=(l+r)/2?"left":"right":n<=a/2?c="left":n>=o-a/2&&(c="right"),qd(c,e,t,s)&&(c="center"),c}function Kd(e,t,s){const i=s.yAlign||t.yAlign||Hd(e,s);return{xAlign:s.xAlign||t.xAlign||Xd(e,t,s,i),yAlign:i}}function Qd(e,t){let{x:s,width:i}=e;return"right"===t?s-=i:"center"===t&&(s-=i/2),s}function Yd(e,t,s){let{y:i,height:n}=e;return"top"===t?i+=s:i-="bottom"===t?n+s:n/2,i}function Gd(e,t,s,i){const{caretSize:n,caretPadding:a,cornerRadius:o}=e,{xAlign:l,yAlign:r}=s,c=n+a,{topLeft:d,topRight:h,bottomLeft:u,bottomRight:p}=Hn(o);let g=Qd(t,l);const f=Yd(t,r,c);return"center"===r?"left"===l?g+=c:"right"===l&&(g-=c):"left"===l?g-=Math.max(d,u)+n:"right"===l&&(g+=Math.max(h,p)+n),{x:$i(g,0,i.width-t.width),y:$i(f,0,i.height-t.height)}}function Jd(e,t,s){const i=qn(s.padding);return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-i.right:e.x+i.left}function Zd(e){return Bd([],zd(e))}function eh(e,t,s){return Yn(e,{tooltip:t,tooltipItems:s,type:"tooltip"})}function th(e,t){const s=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return s?e.override(s):e}const sh={beforeTitle:Ls,title(e){if(e.length>0){const t=e[0],s=t.chart.data.labels,i=s?s.length:0;if(this&&this.options&&"dataset"===this.options.mode)return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex{const t={before:[],lines:[],after:[]},n=th(s,e);Bd(t.before,zd(ih(n,"beforeLabel",this,e))),Bd(t.lines,ih(n,"label",this,e)),Bd(t.after,zd(ih(n,"afterLabel",this,e))),i.push(t)}),i}getAfterBody(e,t){return Zd(ih(t.callbacks,"afterBody",this,e))}getFooter(e,t){const{callbacks:s}=t,i=ih(s,"beforeFooter",this,e),n=ih(s,"footer",this,e),a=ih(s,"afterFooter",this,e);let o=[];return o=Bd(o,zd(i)),o=Bd(o,zd(n)),o=Bd(o,zd(a)),o}_createItems(e){const t=this._active,s=this.chart.data,i=[],n=[],a=[];let o,l,r=[];for(o=0,l=t.length;oe.filter(t,i,n,s))),e.itemSort&&(r=r.sort((t,i)=>e.itemSort(t,i,s))),js(r,t=>{const s=th(e.callbacks,t);i.push(ih(s,"labelColor",this,t)),n.push(ih(s,"labelPointStyle",this,t)),a.push(ih(s,"labelTextColor",this,t))}),this.labelColors=i,this.labelPointStyles=n,this.labelTextColors=a,this.dataPoints=r,r}update(e,t){const s=this.options.setContext(this.getContext()),i=this._active;let n,a=[];if(i.length){const e=Wd[s.position].call(this,i,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const t=this._size=jd(this,s),o=Object.assign({},e,t),l=Kd(this.chart,s,o),r=Gd(s,o,l,this.chart);this.xAlign=l.xAlign,this.yAlign=l.yAlign,n={opacity:1,x:r.x,y:r.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=a,this.$context=void 0,n&&this._resolveAnimations().update(this,n),e&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,s,i){const n=this.getCaretPosition(e,s,i);t.lineTo(n.x1,n.y1),t.lineTo(n.x2,n.y2),t.lineTo(n.x3,n.y3)}getCaretPosition(e,t,s){const{xAlign:i,yAlign:n}=this,{caretSize:a,cornerRadius:o}=s,{topLeft:l,topRight:r,bottomLeft:c,bottomRight:d}=Hn(o),{x:h,y:u}=e,{width:p,height:g}=t;let f,m,b,y,x,v;return"center"===n?(x=u+g/2,"left"===i?(f=h,m=f-a,y=x+a,v=x-a):(f=h+p,m=f+a,y=x-a,v=x+a),b=f):(m="left"===i?h+Math.max(l,c)+a:"right"===i?h+p-Math.max(r,d)-a:this.caretX,"top"===n?(y=u,x=y-a,f=m-a,b=m+a):(y=u+g,x=y+a,f=m+a,b=m-a),v=y),{x1:f,x2:m,x3:b,y1:y,y2:x,y3:v}}drawTitle(e,t,s){const i=this.title,n=i.length;let a,o,l;if(n){const r=Ka(s.rtl,this.x,this.width);for(e.x=Jd(this,s.titleAlign,s),t.textAlign=r.textAlign(s.titleAlign),t.textBaseline="middle",a=Xn(s.titleFont),o=s.titleSpacing,t.fillStyle=s.titleColor,t.font=a.string,l=0;l0!==e)?(e.beginPath(),e.fillStyle=n.multiKeyBackground,On(e,{x:t,y:p,w:r,h:l,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),On(e,{x:s,y:p+1,w:r-2,h:l-2,radius:o}),e.fill()):(e.fillStyle=n.multiKeyBackground,e.fillRect(t,p,r,l),e.strokeRect(t,p,r,l),e.fillStyle=a.backgroundColor,e.fillRect(s,p+1,r-2,l-2))}e.fillStyle=this.labelTextColors[s]}drawBody(e,t,s){const{body:i}=this,{bodySpacing:n,bodyAlign:a,displayColors:o,boxHeight:l,boxWidth:r,boxPadding:c}=s,d=Xn(s.bodyFont);let h=d.lineHeight,u=0;const p=Ka(s.rtl,this.x,this.width),g=function(s){t.fillText(s,p.x(e.x+u),e.y+h/2),e.y+=h+n},f=p.textAlign(a);let m,b,y,x,v,k,_;for(t.textAlign=a,t.textBaseline="middle",t.font=d.string,e.x=Jd(this,f,s),t.fillStyle=s.bodyColor,js(this.beforeBody,g),u=o&&"right"!==f?"center"===a?r/2+c:r+2+c:0,x=0,k=i.length;x0&&t.stroke()}_updateAnimationTarget(e){const t=this.chart,s=this.$animations,i=s&&s.x,n=s&&s.y;if(i||n){const s=Wd[e.position].call(this,this._active,this._eventPosition);if(!s)return;const a=this._size=jd(this,e),o=Object.assign({},s,this._size),l=Kd(t,e,o),r=Gd(e,o,l,t);i._to===r.x&&n._to===r.y||(this.xAlign=l.xAlign,this.yAlign=l.yAlign,this.width=a.width,this.height=a.height,this.caretX=s.x,this.caretY=s.y,this._resolveAnimations().update(this,r))}}_willRender(){return!!this.opacity}draw(e){const t=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(t);const i={width:this.width,height:this.height},n={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=qn(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=s,this.drawBackground(n,e,i,t),Qa(e,t.textDirection),n.y+=a.top,this.drawTitle(n,e,t),this.drawBody(n,e,t),this.drawFooter(n,e,t),Ya(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){const s=this._active,i=e.map(({datasetIndex:e,index:t})=>{const s=this.chart.getDatasetMeta(e);if(!s)throw new Error("Cannot find a dataset at index "+e);return{datasetIndex:e,element:s.data[t],index:t}}),n=!Hs(s,i),a=this._positionChanged(i,t);(n||a)&&(this._active=i,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,s=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,n=this._active||[],a=this._getActiveElements(e,n,t,s),o=this._positionChanged(a,e),l=t||!Hs(a,n)||o;return l&&(this._active=a,(i.enabled||i.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),l}_getActiveElements(e,t,s,i){const n=this.options;if("mouseout"===e.type)return[];if(!i)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&void 0!==this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index));const a=this.chart.getElementsAtEventForMode(e,n.mode,n,s);return n.reverse&&a.reverse(),a}_positionChanged(e,t){const{caretX:s,caretY:i,options:n}=this,a=Wd[n.position].call(this,e,t);return!1!==a&&(s!==a.x||i!==a.y)}}(0,Bt.A)(nh,"positioners",Wd);var ah={id:"tooltip",_element:nh,positioners:Wd,afterInit(e,t,s){s&&(e.tooltip=new nh({chart:e,options:s}))},beforeUpdate(e,t,s){e.tooltip&&e.tooltip.initialize(s)},reset(e,t,s){e.tooltip&&e.tooltip.initialize(s)},afterDraw(e){const t=e.tooltip;if(t&&t._willRender()){const s={tooltip:t};if(!1===e.notifyPlugins("beforeTooltipDraw",{...s,cancelable:!0}))return;t.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",s)}},afterEvent(e,t){if(e.tooltip){const s=t.replay;e.tooltip.handleEvent(t.event,s,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:sh},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>"filter"!==e&&"itemSort"!==e&&"external"!==e,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const oh=(e,t,s,i)=>("string"===typeof t?(s=e.push(t)-1,i.unshift({index:s,label:t})):isNaN(t)&&(s=null),s);function lh(e,t,s,i){const n=e.indexOf(t);if(-1===n)return oh(e,t,s,i);const a=e.lastIndexOf(t);return n!==a?s:n}const rh=(e,t)=>null===e?null:$i(Math.round(e),0,t);function ch(e){const t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}function hh(e,t){const s=[],i=1e-14,{bounds:n,step:a,min:o,max:l,precision:r,count:c,maxTicks:d,maxDigits:h,includeBounds:u}=e,p=a||1,g=d-1,{min:f,max:m}=t,b=!Es(o),y=!Es(l),x=!Es(c),v=(m-f)/(h+1);let k,_,w,C,S=yi((m-f)/g/p)*p;if(Sg&&(S=yi(C*S/g/p)*p),Es(r)||(k=Math.pow(10,r),S=Math.ceil(S*k)/k),"ticks"===n?(_=Math.floor(f/S)*S,w=Math.ceil(m/S)*S):(_=f,w=m),b&&y&&a&&_i((l-o)/a,S/1e3)?(C=Math.round(Math.min((l-o)/S,d)),S=(l-o)/C,_=o,w=l):x?(_=b?o:_,w=y?l:w,C=c-1,S=(w-_)/C):(C=(w-_)/S,C=bi(C,Math.round(C),S/1e3)?Math.round(C):Math.ceil(C));const F=Math.max(Fi(S),Fi(_));k=Math.pow(10,Es(r)?F:r),_=Math.round(_*k)/k,w=Math.round(w*k)/k;let T=0;for(b&&(u&&_!==o?(s.push({value:o}),_l)break;s.push({value:e})}return y&&u&&w!==l?s.length&&bi(s[s.length-1].value,l,uh(l,v,e))?s[s.length-1].value=l:s.push({value:l}):y&&w!==l||s.push({value:w}),s}function uh(e,t,{horizontal:s,minRotation:i}){const n=Ci(i),a=(s?Math.sin(n):Math.cos(n))||.001,o=.75*t*(""+e).length;return Math.min(t/a,o)}(0,Bt.A)(dh,"id","category"),(0,Bt.A)(dh,"defaults",{ticks:{callback:ch}});class ph extends Pr{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return Es(e)||("number"===typeof e||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){const{beginAtZero:e}=this.options,{minDefined:t,maxDefined:s}=this.getUserBounds();let{min:i,max:n}=this;const a=e=>i=t?i:e,o=e=>n=s?n:e;if(e){const e=mi(i),t=mi(n);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(i===n){let t=0===n?1:Math.abs(.05*n);o(n+t),e||a(i-t)}this.min=i,this.max=n}getTickLimit(){const e=this.options.ticks;let t,{maxTicksLimit:s,stepSize:i}=e;return i?(t=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,t>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${t} ticks. Limiting to 1000.`),t=1e3)):(t=this.computeTickLimit(),s=s||11),s&&(t=Math.min(s,t)),t}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const e=this.options,t=e.ticks;let s=this.getTickLimit();s=Math.max(2,s);const i={maxTicks:s,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:!1!==t.includeBounds},n=this._range||this,a=hh(i,n);return"ticks"===e.bounds&&wi(a,this,"value"),e.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const e=this.ticks;let t=this.min,s=this.max;if(super.configure(),this.options.offset&&e.length){const i=(s-t)/Math.max(e.length-1,1)/2;t-=i,s+=i}this._startValue=t,this._endValue=s,this._valueRange=s-t}getLabelForValue(e){return hn(e,this.chart.options.locale,this.options.ticks.format)}}class gh extends ph{determineDataLimits(){const{min:e,max:t}=this.getMinMax(!0);this.min=Os(e)?e:0,this.max=Os(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){const e=this.isHorizontal(),t=e?this.width:this.height,s=Ci(this.options.ticks.minRotation),i=(e?Math.sin(s):Math.cos(s))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,n.lineHeight/i))}getPixelForValue(e){return null===e?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}}(0,Bt.A)(gh,"id","linear"),(0,Bt.A)(gh,"defaults",{ticks:{callback:gn.formatters.numeric}});const fh=e=>Math.floor(fi(e)),mh=(e,t)=>Math.pow(10,fh(e)+t);function bh(e){const t=e/Math.pow(10,fh(e));return 1===t}function yh(e,t,s){const i=Math.pow(10,s),n=Math.floor(e/i),a=Math.ceil(t/i);return a-n}function xh(e,t){const s=t-e;let i=fh(s);while(yh(e,t,i)>10)i++;while(yh(e,t,i)<10)i--;return Math.min(i,fh(e))}function vh(e,{min:t,max:s}){t=Rs(e.min,t);const i=[],n=fh(t);let a=xh(t,s),o=a<0?Math.pow(10,Math.abs(a)):1;const l=Math.pow(10,a),r=n>a?Math.pow(10,n):0,c=Math.round((t-r)*o)/o,d=Math.floor((t-r)/l/10)*l*10;let h=Math.floor((c-d)/Math.pow(10,a)),u=Rs(e.min,Math.round((r+d+h*Math.pow(10,a))*o)/o);while(u=10?h=h<15?15:20:h++,h>=20&&(a++,h=2,o=a>=0?1:o),u=Math.round((r+d+h*Math.pow(10,a))*o)/o;const p=Rs(e.max,u);return i.push({value:p,major:bh(p),significand:h}),i}class kh extends Pr{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){const s=ph.prototype.parse.apply(this,[e,t]);if(0!==s)return Os(s)&&s>0?s:null;this._zero=!0}determineDataLimits(){const{min:e,max:t}=this.getMinMax(!0);this.min=Os(e)?Math.max(0,e):null,this.max=Os(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Os(this._userMin)&&(this.min=e===mh(this.min,0)?mh(this.min,-1):mh(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:e,maxDefined:t}=this.getUserBounds();let s=this.min,i=this.max;const n=t=>s=e?s:t,a=e=>i=t?i:e;s===i&&(s<=0?(n(1),a(10)):(n(mh(s,-1)),a(mh(i,1)))),s<=0&&n(mh(i,-1)),i<=0&&a(mh(s,1)),this.min=s,this.max=i}buildTicks(){const e=this.options,t={min:this._userMin,max:this._userMax},s=vh(t,this);return"ticks"===e.bounds&&wi(s,this,"value"),e.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(e){return void 0===e?"0":hn(e,this.chart.options.locale,this.options.ticks.format)}configure(){const e=this.min;super.configure(),this._startValue=fi(e),this._valueRange=fi(this.max)-fi(e)}getPixelForValue(e){return void 0!==e&&0!==e||(e=this.min),null===e||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(fi(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const t=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+t*this._valueRange)}}function _h(e){const t=e.ticks;if(t.display&&e.display){const e=qn(t.backdropPadding);return Ws(t.font&&t.font.size,kn.font.size)+e.height}return 0}function wh(e,t,s){return s=Is(s)?s:[s],{w:Cn(e,t.string,s),h:s.length*t.lineHeight}}function Ch(e,t,s,i,n){return e===i||e===n?{start:t-s/2,end:t+s/2}:en?{start:t-s,end:t}:{start:t,end:t+s}}function Sh(e){const t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},s=Object.assign({},t),i=[],n=[],a=e._pointLabels.length,o=e.options.pointLabels,l=o.centerPointLabels?li/a:0;for(let r=0;rt.r&&(l=(i.end-t.r)/a,e.r=Math.max(e.r,t.r+l)),n.startt.b&&(r=(n.end-t.b)/o,e.b=Math.max(e.b,t.b+r))}function Th(e,t,s){const i=e.drawingArea,{extra:n,additionalAngle:a,padding:o,size:l}=s,r=e.getPointPosition(t,i+n+o,a),c=Math.round(Si(Di(r.angle+ui))),d=$h(r.y,l.h,c),h=Dh(c),u=Ah(r.x,l.w,h);return{visible:!0,x:r.x,y:d,textAlign:h,left:u,top:d,right:u+l.w,bottom:d+l.h}}function Mh(e,t){if(!t)return!0;const{left:s,top:i,right:n,bottom:a}=e,o=Pn({x:s,y:i},t)||Pn({x:s,y:a},t)||Pn({x:n,y:i},t)||Pn({x:n,y:a},t);return!o}function Ph(e,t,s){const i=[],n=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:l}=a.pointLabels,r={extra:_h(a)/2,additionalAngle:o?li/n:0};let c;for(let d=0;d270||s<90)&&(e-=t),e}function Lh(e,t,s){const{left:i,top:n,right:a,bottom:o}=s,{backdropColor:l}=t;if(!Es(l)){const s=Hn(t.borderRadius),r=qn(t.backdropPadding);e.fillStyle=l;const c=i-r.left,d=n-r.top,h=a-i+r.width,u=o-n+r.height;Object.values(s).some(e=>0!==e)?(e.beginPath(),On(e,{x:c,y:d,w:h,h:u,radius:s}),e.fill()):e.fillRect(c,d,h,u)}}function Vh(e,t){const{ctx:s,options:{pointLabels:i}}=e;for(let n=t-1;n>=0;n--){const t=e._pointLabelItems[n];if(!t.visible)continue;const a=i.setContext(e.getPointLabelContext(n));Lh(s,a,t);const o=Xn(a.font),{x:l,y:r,textAlign:c}=t;Un(s,e._pointLabels[n],l,r+o.lineHeight/2,o,{color:a.color,textAlign:c,textBaseline:"middle"})}}function Eh(e,t,s,i){const{ctx:n}=e;if(s)n.arc(e.xCenter,e.yCenter,t,0,ri);else{let s=e.getPointPosition(0,t);n.moveTo(s.x,s.y);for(let a=1;a{const s=Ns(this.options.pointLabels.callback,[e,t],this);return s||0===s?s:""}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){const e=this.options;e.display&&e.pointLabels.display?Sh(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,s,i){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((s-i)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,s,i))}getIndexAngle(e){const t=ri/(this._pointLabels.length||1),s=this.options.startAngle||0;return Di(e*t+Ci(s))}getDistanceFromCenterForValue(e){if(Es(e))return NaN;const t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(Es(e))return NaN;const t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){const t=this._pointLabels||[];if(e>=0&&e{if(0!==t||0===t&&this.min<0){l=this.getDistanceFromCenterForValue(e.value);const s=this.getContext(t),o=i.setContext(s),r=n.setContext(s);Ih(this,o,l,a,r)}}),s.display){for(e.save(),o=a-1;o>=0;o--){const i=s.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:a}=i;a&&n&&(e.lineWidth=a,e.strokeStyle=n,e.setLineDash(i.borderDash),e.lineDashOffset=i.borderDashOffset,l=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),r=this.getPointPosition(o,l),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(r.x,r.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const e=this.ctx,t=this.options,s=t.ticks;if(!s.display)return;const i=this.getIndexAngle(0);let n,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(i),e.textAlign="center",e.textBaseline="middle",this.ticks.forEach((i,o)=>{if(0===o&&this.min>=0&&!t.reverse)return;const l=s.setContext(this.getContext(o)),r=Xn(l.font);if(n=this.getDistanceFromCenterForValue(this.ticks[o].value),l.showLabelBackdrop){e.font=r.string,a=e.measureText(i.label).width,e.fillStyle=l.backdropColor;const t=qn(l.backdropPadding);e.fillRect(-a/2-t.left,-n-r.size/2-t.top,a+t.width,r.size+t.height)}Un(e,i.label,0,-n,r,{color:l.color,strokeColor:l.textStrokeColor,strokeWidth:l.textStrokeWidth})}),e.restore()}drawTitle(){}}(0,Bt.A)(Oh,"id","radialLinear"),(0,Bt.A)(Oh,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:gn.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(e){return e},padding:5,centerPointLabels:!1}}),(0,Bt.A)(Oh,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),(0,Bt.A)(Oh,"descriptors",{angleLines:{_fallback:"grid"}});const Rh={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Wh=Object.keys(Rh);function Bh(e,t){return e-t}function zh(e,t){if(Es(t))return null;const s=e._adapter,{parser:i,round:n,isoWeekday:a}=e._parseOpts;let o=t;return"function"===typeof i&&(o=i(o)),Os(o)||(o="string"===typeof i?s.parse(o,i):s.parse(o)),null===o?null:(n&&(o="week"!==n||!ki(a)&&!0!==a?s.startOf(o,n):s.startOf(o,"isoWeek",a)),+o)}function Nh(e,t,s,i){const n=Wh.length;for(let a=Wh.indexOf(e);a=Wh.indexOf(s);a--){const s=Wh[a];if(Rh[s].common&&e._adapter.diff(n,i,s)>=t-1)return s}return Wh[s?Wh.indexOf(s):0]}function Hh(e){for(let t=Wh.indexOf(e)+1,s=Wh.length;t=t?s[i]:s[n];e[a]=!0}}else e[t]=!0}function Xh(e,t,s,i){const n=e._adapter,a=+n.startOf(t[0].value,i),o=t[t.length-1].value;let l,r;for(l=a;l<=o;l=+n.add(l,1,i))r=s[l],r>=0&&(t[r].major=!0);return t}function Kh(e,t,s){const i=[],n={},a=t.length;let o,l;for(o=0;o+e.value))}initOffsets(e=[]){let t,s,i=0,n=0;this.options.offset&&e.length&&(t=this.getDecimalForValue(e[0]),i=1===e.length?1-t:(this.getDecimalForValue(e[1])-t)/2,s=this.getDecimalForValue(e[e.length-1]),n=1===e.length?s:(s-this.getDecimalForValue(e[e.length-2]))/2);const a=e.length<3?.5:.25;i=$i(i,0,a),n=$i(n,0,a),this._offsets={start:i,end:n,factor:1/(i+1+n)}}_generate(){const e=this._adapter,t=this.min,s=this.max,i=this.options,n=i.time,a=n.unit||Nh(n.minUnit,t,s,this._getLabelCapacity(t)),o=Ws(i.ticks.stepSize,1),l="week"===a&&n.isoWeekday,r=ki(l)||!0===l,c={};let d,h,u=t;if(r&&(u=+e.startOf(u,"isoWeek",l)),u=+e.startOf(u,r?"day":a),e.diff(s,t,a)>1e5*o)throw new Error(t+" and "+s+" are too far apart with stepSize of "+o+" "+a);const p="data"===i.ticks.source&&this.getDataTimestamps();for(d=u,h=0;d+e)}getLabelForValue(e){const t=this._adapter,s=this.options.time;return s.tooltipFormat?t.format(e,s.tooltipFormat):t.format(e,s.displayFormats.datetime)}format(e,t){const s=this.options,i=s.time.displayFormats,n=this._unit,a=t||i[n];return this._adapter.format(e,a)}_tickFormatFunction(e,t,s,i){const n=this.options,a=n.ticks.callback;if(a)return Ns(a,[e,t,s],this);const o=n.time.displayFormats,l=this._unit,r=this._majorUnit,c=l&&o[l],d=r&&o[r],h=s[t],u=r&&d&&h&&h.major;return this._adapter.format(e,i||(u?d:c))}generateTickLabels(e){let t,s,i;for(t=0,s=e.length;t0?o:1}getDataTimestamps(){let e,t,s=this._cache.data||[];if(s.length)return s;const i=this.getMatchingVisibleMetas();if(this._normalized&&i.length)return this._cache.data=i[0].controller.getAllParsedValues(this);for(e=0,t=i.length;e=e[l].pos&&t<=e[r].pos&&({lo:l,hi:r}=Ii(e,"pos",t)),({pos:i,time:a}=e[l]),({pos:n,time:o}=e[r])):(t>=e[l].time&&t<=e[r].time&&({lo:l,hi:r}=Ii(e,"time",t)),({time:i,pos:a}=e[l]),({time:n,pos:o}=e[r]));const c=n-i;return c?a+(o-a)*(t-i)/c:a}(0,Bt.A)(Qh,"id","time"),(0,Bt.A)(Qh,"defaults",{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});class Gh extends Qh{constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Yh(t,this.min),this._tableRange=Yh(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){const{min:t,max:s}=this,i=[],n=[];let a,o,l,r,c;for(a=0,o=e.length;a=t&&r<=s&&i.push(r);if(i.length<2)return[{time:t,pos:0},{time:s,pos:1}];for(a=0,o=i.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;const t=this.getDataTimestamps(),s=this.getLabelTimestamps();return e=t.length&&s.length?this.normalize(t.concat(s)):t.length?t:s,e=this._cache.all=e,e}getDecimalForValue(e){return(Yh(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){const t=this._offsets,s=this.getDecimalForPixel(e)/t.factor-t.end;return Yh(this._table,s*this._tableRange+this._minPos,!0)}}(0,Bt.A)(Gh,"id","timeseries"),(0,Bt.A)(Gh,"defaults",Qh.defaults);var Jh=s(90144);const Zh={data:{type:Object,required:!0},options:{type:Object,default:()=>({})},plugins:{type:Array,default:()=>[]},datasetIdKey:{type:String,default:"label"},updateMode:{type:String,default:void 0}},eu={ariaLabel:{type:String},ariaDescribedby:{type:String}},tu={type:{type:String,required:!0},destroyDelay:{type:Number,default:0},...Zh,...eu},su="2"===i.rE[0]?(e,t)=>Object.assign(e,{attrs:t}):(e,t)=>Object.assign(e,t);function iu(e){return(0,Jh.ju)(e)?(0,Jh.ux)(e):e}function nu(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return(0,Jh.ju)(t)?new Proxy(e,{}):e}function au(e,t){const s=e.options;s&&t&&Object.assign(s,t)}function ou(e,t){e.labels=t}function lu(e,t,s){const i=[];e.datasets=t.map(t=>{const n=e.datasets.find(e=>e[s]===t[s]);return n&&t.data&&!i.includes(n)?(i.push(n),Object.assign(n,t),n):{...t}})}function ru(e,t){const s={labels:[],datasets:[]};return ou(s,e.labels),lu(s,e.datasets,t),s}const cu=(0,i.pM)({props:tu,setup(e,t){let{expose:s,slots:n}=t;const a=(0,Jh.KR)(null),o=(0,Jh.IJ)(null);s({chart:o});const l=()=>{if(!a.value)return;const{type:t,data:s,options:i,plugins:n,datasetIdKey:l}=e,r=ru(s,l),c=nu(r,s);o.value=new yc(a.value,{type:t,data:c,options:{...i},plugins:n})},r=()=>{const t=(0,Jh.ux)(o.value);t&&(e.destroyDelay>0?setTimeout(()=>{t.destroy(),o.value=null},e.destroyDelay):(t.destroy(),o.value=null))},c=t=>{t.update(e.updateMode)};return(0,i.sV)(l),(0,i.hi)(r),(0,i.wB)([()=>e.options,()=>e.data],(t,s)=>{let[n,a]=t,[l,r]=s;const d=(0,Jh.ux)(o.value);if(!d)return;let h=!1;if(n){const e=iu(n),t=iu(l);e&&e!==t&&(au(d,e),h=!0)}if(a){const t=iu(a.labels),s=iu(r.labels),i=iu(a.datasets),n=iu(r.datasets);t!==s&&(ou(d.config.data,t),h=!0),i&&i!==n&&(lu(d.config.data,i,e.datasetIdKey),h=!0)}h&&(0,i.dY)(()=>{c(d)})},{deep:!0}),()=>(0,i.h)("canvas",{role:"img","aria-label":e.ariaLabel,"aria-describedby":e.ariaDescribedby,ref:a},[(0,i.h)("p",{},[n.default?n.default():""])])}});function du(e,t){return yc.register(t),(0,i.pM)({props:Zh,setup(t,s){let{expose:n}=s;const a=(0,Jh.IJ)(null),o=e=>{a.value=e?.chart};return n({chart:a}),()=>(0,i.h)(cu,su({ref:o},{type:e,...t}))}})}const hu=du("doughnut",al),uu=du("line",ol);s(79577),s(41549),s(49797),s(49631),s(35623);class pu extends Error{constructor(e,t,s=!1,i=""){super(e),this.name="BatchOperationError",this.code=t,this.recoverable=s,this.suggestion=i}}const gu={401:()=>new pu("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录"),403:()=>new pu("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限"),400:e=>new pu(`请求数据无效: ${e}`,"INVALID_DATA",!0,"请检查数据格式后重试"),500:()=>new pu("服务器内部错误","SERVER_ERROR",!0,"请稍后重试,如果问题持续请联系管理员"),NETWORK:()=>new pu("网络连接失败","NETWORK_ERROR",!0,"请检查网络连接后重试"),ABORT:()=>new pu("操作已取消","ABORTED",!1,"")};function fu(e,t=""){if("AbortError"===e.name)return gu.ABORT();if(e instanceof Response||e&&"number"===typeof e.status){const s=gu[e.status];return s?s(t):new pu(`请求失败: ${e.status}`,"HTTP_ERROR",!0,"请稍后重试")}return e instanceof TypeError&&e.message.includes("fetch")?gu.NETWORK():new pu(e.message||"未知错误","UNKNOWN_ERROR",!0,"请稍后重试")}class mu{constructor(e={}){this.batchSize=e.batchSize||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.abortController=null}async fetchAllRecords(e=!1){this.abortController=new AbortController;const t=[];let s=null,i=0,n=0;try{do{if(this.abortController.signal.aborted)break;const a=await this.fetchBatch(s,e);t.push(...a.records),s=a.nextCursor,i+=a.records.length,n++,this.onProgress({phase:"fetching",current:i,batchCount:n,message:`已获取 ${i} 条记录...`})}while(s&&!this.abortController.signal.aborted);if(this.abortController.signal.aborted)throw gu.ABORT();return t}catch(a){const e=a instanceof pu?a:fu(a);throw this.onError(e),e}}async fetchBatch(e,t){const s=new URLSearchParams;e&&s.set("cursor",e),t&&s.set("includeValue","true"),s.set("limit",String(this.batchSize));try{const e=await(0,Rt.A)(`/api/manage/batch/list?${s}`,{signal:this.abortController.signal});if(!e.ok){let t="";try{const s=await e.json();t=s.error||""}catch{}throw fu(e,t)}const t=await e.json();if(!t.success)throw new pu(t.error||"请求失败","API_ERROR",!0,"请稍后重试");return{records:t.records||[],nextCursor:t.nextCursor||null,totalProcessed:t.totalProcessed||0}}catch(i){if(i instanceof pu)throw i;throw fu(i)}}abort(){this.abortController&&this.abortController.abort()}isAborted(){return!!this.abortController&&this.abortController.signal.aborted}reset(){this.abortController=null}}var bu=mu;class yu{constructor(e={}){this.chunkSize=e.chunkSize||null,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.sessionId=this.generateSessionId(),this.aborted=!1}async fetchConfig(){try{const e=await(0,Rt.A)("/api/manage/batch/index/config");if(!e.ok)throw new Error("获取配置失败");const t=await e.json();if(t.success)return{chunkSize:t.chunkSize||500,databaseType:t.databaseType||"unknown"};throw new Error(t.error||"获取配置失败")}catch(e){return console.warn("Failed to fetch index config, using default:",e),{chunkSize:500,databaseType:"unknown"}}}async rebuild(){this.aborted=!1;try{if(!this.chunkSize){const e=await this.fetchConfig();this.chunkSize=e.chunkSize}this.onProgress({phase:"fetching",message:"正在获取数据...",current:0});const e=new bu({onProgress:e=>this.onProgress({...e,phase:"fetching"}),onError:e=>this.onError(e)}),t=await e.fetchAllRecords(!1);if(this.aborted)throw new pu("操作已取消","ABORTED",!1,"");if(this.onProgress({phase:"sorting",message:"正在排序...",current:0,total:t.length}),this.sortByTimestampDescending(t),this.aborted)throw new pu("操作已取消","ABORTED",!1,"");const s=this.splitIntoChunks(t);for(let i=0;i{const s=e.metadata&&e.metadata.TimeStamp||0,i=t.metadata&&t.metadata.TimeStamp||0;return i-s})}splitIntoChunks(e){const t=[];for(let s=0;se.toString(16).padStart(2,"0")).join("")}let n=2166136261,a=2166136261;for(let o=0;o>>0,a=Math.imul(a^i[o],16777635)>>>0;return n.toString(16).padStart(8,"0")+a.toString(16).padStart(8,"0")}createHttpError(e,t=""){switch(e){case 401:return new pu("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录");case 403:return new pu("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限");case 400:return new pu(`请求数据无效: ${t}`,"INVALID_DATA",!0,"请检查数据格式后重试");case 404:return new pu("会话不存在","SESSION_NOT_FOUND",!1,"请重新开始索引重建");case 410:return new pu("会话已过期","SESSION_EXPIRED",!1,"请重新开始索引重建");case 500:default:return new pu(`服务器错误: ${t||e}`,"SERVER_ERROR",!0,"请稍后重试")}}sleep(e){return new Promise(t=>setTimeout(t,e))}abort(){this.aborted=!0}reset(){this.aborted=!1,this.sessionId=this.generateSessionId()}}var xu=yu;class vu{constructor(e={}){this.onProgress=e.onProgress||(()=>{}),this.processor=null}async generateBackup(){this.processor=new bu({onProgress:e=>this.onProgress({...e,phase:"fetching"})});const e=await this.processor.fetchAllRecords(!0);this.onProgress({phase:"building",message:"正在构建备份数据..."});const t={timestamp:Date.now(),version:Wt.rE,data:{fileCount:e.length,files:{},settings:{}}};for(const n of e)t.data.files[n.id]={metadata:n.metadata,value:n.value||null};const s=await this.fetchSettings();t.data.settings=s,this.onProgress({phase:"downloading",message:"正在生成下载..."}),this.downloadBackup(t);const i=Object.keys(s).length;return{success:!0,fileCount:e.length,settingsCount:i}}async fetchSettings(){try{const e=await(0,Rt.A)("/api/manage/batch/settings");if(!e.ok)return console.warn("Failed to fetch settings:",e.status),{};const t=await e.json();return t.settings||{}}catch(e){return console.warn("Failed to fetch settings:",e),{}}}downloadBackup(e){const t=JSON.stringify(e,null,2),s=new Blob([t],{type:"application/json"}),i=URL.createObjectURL(s),n=document.createElement("a");n.href=i,n.download=`imgbed_backup_${(new Date).toISOString().split("T")[0]}.json`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(i)}abort(){this.processor&&this.processor.abort()}isAborted(){return!!this.processor&&this.processor.isAborted()}}var ku=vu;class _u{constructor(e={}){this.chunkSize=e.chunkSize||50,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProgress=e.onProgress||(()=>{}),this.onError=e.onError||(()=>{}),this.aborted=!1}async restore(e){if(this.aborted=!1,!e||!e.data)throw new pu("备份文件格式无效","INVALID_BACKUP",!1,"请选择有效的备份文件");const{files:t={},settings:s={}}=e.data,i=Object.entries(t),n=Object.entries(s),a=i.length,o=n.length,l=a+o;let r=0,c=0,d=0,h=0;try{this.onProgress({phase:"restoring_files",message:"正在恢复文件数据...",current:0,total:l});const t=this.splitIntoChunks(i,this.chunkSize);for(let e=0;esetTimeout(t,e))}abort(){this.aborted=!0}}var wu=_u;yc.register(Mc,ah,Rd,dh,gh,Nc,Bc,Dd);const Cu=864e5;function Su(e){return String(e).padStart(2,"0")}function Fu(e){return`${e.getFullYear()}-${Su(e.getMonth()+1)}-${Su(e.getDate())}`}function Tu(){const e=new Date;e.setHours(0,0,0,0);const t=new Date(e.getTime()-6*Cu);return[Fu(t),Fu(e)]}var Mu={name:"SysCogStatus",components:{Doughnut:hu,Line:uu,DateRangeCalendar:q},data(){return{loading:!1,rebuilding:!1,backing:!1,restoring:!1,indexInfo:{},indexInfoLoaded:!1,indexInfoError:!1,currentTime:new Date,clockTimer:null,version:Wt.rE,loadErrors:{newest:!1,oldest:!1},trendGroupBy:"channel",trendDatePickerVisible:!1,trendDateRange:Tu(),channelColors:["#8B5CF6","#EC4899","#06B6D4","#10B981","#F59E0B","#EF4444","#2563EB","#84CC16"],typeColors:["#10B981","#3B82F6","#F59E0B","#EF4444","#8B5CF6","#EC4899","#06B6D4","#84CC16"],trendColors:["#2563EB","#10B981","#F59E0B","#EF4444","#8B5CF6","#06B6D4","#EC4899","#84CC16","#64748B"],isProcessing:!1,processingPhase:"",processingProgress:{current:0,total:0,message:"",percentage:0},processingError:null,processingStartTime:null,currentRebuilder:null,currentBackupGenerator:null,currentRestoreProcessor:null}},computed:{currentLocale(){return String(this.$i18n.locale||"zh-CN")},indexedFileCount(){return Number(this.indexInfo.totalFiles||0)},uploadChannelCount(){return Object.keys(this.indexInfo.channelStats||{}).length},systemHealthState(){return this.indexInfoError?"attention":this.indexInfoLoaded?"healthy":"checking"},systemHealthLabel(){return this.$t(`sysStatus.health${this.systemHealthState.charAt(0).toUpperCase()}${this.systemHealthState.slice(1)}`)},greetingTitle(){const e=this.currentTime.getHours();return e<5?this.$t("sysStatus.greetingLateNight"):e<11?this.$t("sysStatus.greetingMorning"):e<14?this.$t("sysStatus.greetingNoon"):e<18?this.$t("sysStatus.greetingAfternoon"):e<23?this.$t("sysStatus.greetingEvening"):this.$t("sysStatus.greetingLateNight")},systemStatusSummary(){return this.indexInfoError?this.$t("sysStatus.summaryUnavailable"):this.indexInfoLoaded?0===this.indexedFileCount?this.$t("sysStatus.summaryEmpty"):0===this.uploadChannelCount?this.$t("sysStatus.summaryIndexed",{files:this.indexedFileCount.toLocaleString(this.currentLocale)}):this.$t("sysStatus.summaryHealthy",{files:this.indexedFileCount.toLocaleString(this.currentLocale),channels:this.uploadChannelCount.toLocaleString(this.currentLocale)}):this.$t("sysStatus.summaryChecking")},currentDateLabel(){return new Intl.DateTimeFormat(this.currentLocale,{year:"numeric",month:"long",day:"numeric",weekday:"long"}).format(this.currentTime)},currentTimeLabel(){return new Intl.DateTimeFormat(this.currentLocale,{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(this.currentTime)},timeZoneLabel(){const e=Intl.DateTimeFormat().resolvedOptions().timeZone||this.$t("sysStatus.localTimezone"),t=-this.currentTime.getTimezoneOffset(),s=t>=0?"+":"-",i=Math.abs(t),n=Math.floor(i/60),a=i%60,o=0===a?`UTC${s}${n}`:`UTC${s}${n}:${String(a).padStart(2,"0")}`;return`${e} · ${o}`},channelChartData(){const e=this.indexInfo.channelStats||{};return{labels:Object.keys(e),datasets:[{data:Object.values(e),backgroundColor:this.channelColors.slice(0,Object.keys(e).length),borderWidth:0}]}},typeChartData(){const e=this.aggregatedTypeStats;return{labels:Object.keys(e),datasets:[{data:Object.values(e),backgroundColor:this.typeColors.slice(0,Object.keys(e).length),borderWidth:0}]}},aggregatedTypeStats(){const e=this.indexInfo.typeStats||{},t={};for(const[s,i]of Object.entries(e)){const e="Block"===s?this.$t("sysStatus.blocked"):this.$t("sysStatus.normalStatus");t[e]=(t[e]||0)+i}return t},currentTrendGroup(){const e=this.indexInfo.uploadTrend||{},t=e.groupBy||{};return t[this.trendGroupBy]||{series:[]}},trendRawLabels(){const e=this.indexInfo.uploadTrend||{};return e.labels||[]},trendRangeCrossesYear(){const e=new Set;return this.trendRawLabels.forEach(t=>{this.extractTrendLabelDates(t).forEach(t=>e.add(t.year))}),e.size>1},trendDisplayLabels(){return this.trendRawLabels.map(e=>this.formatTrendAxisLabel(e))},hasTrendData(){const e=this.indexInfo.uploadTrend||{};return(e.labels||[]).length>0},trendDateDialogWidth(){return window.innerWidth>768?"420px":"90%"},uploadTrendChartData(){const e=this.indexInfo.uploadTrend||{},t=this.currentTrendGroup.series||[],s="#F97316";return{labels:this.trendDisplayLabels,datasets:[{label:this.$t("sysStatus.totalUploads"),data:e.total||[],borderColor:s,backgroundColor:this.hexToRgba(s,.1),pointBackgroundColor:s,pointBorderColor:s,borderWidth:3,pointRadius:2,pointHoverRadius:5,tension:.28,fill:!1},...t.map((e,t)=>{const s=this.getTrendColor(t);return{label:this.formatTrendSeriesName(e),data:e.data||[],borderColor:s,backgroundColor:this.hexToRgba(s,.12),pointBackgroundColor:s,pointBorderColor:s,borderWidth:2,pointRadius:2,pointHoverRadius:5,tension:.32,fill:!1}})]}},lineChartOptions(){const e="#64748B";return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!0,position:"bottom",labels:{usePointStyle:!0,boxWidth:8,boxHeight:8,padding:16,color:e}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,callbacks:{title:e=>{const t=e?.[0]?.dataIndex;return this.trendRawLabels[t]||""},label:e=>{const t=e.parsed||{},s=void 0!==t.y?t.y:e.raw;return` ${e.dataset.label}: ${Number(s||0).toLocaleString()} ${this.$t("sysStatus.uploadsUnit")}`}}}},scales:{x:{grid:{display:!1},ticks:{color:e,maxTicksLimit:8,autoSkip:!0}},y:{beginAtZero:!0,grid:{color:"rgba(148, 163, 184, 0.18)"},ticks:{color:e,precision:0,callback:e=>Number(e).toLocaleString()}}}}},chartOptions(){return{responsive:!0,maintainAspectRatio:!0,cutout:"65%",hoverOffset:8,layout:{padding:10},plugins:{legend:{display:!1},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,z:100,callbacks:{label:e=>{const t=e.raw,s=e.dataset.data.reduce((e,t)=>e+t,0),i=(t/s*100).toFixed(1);return` ${t.toLocaleString()} (${i}%)`}}}},animation:{animateRotate:!0,animateScale:!0}}},estimatedTimeRemaining(){if(!this.isProcessing||!this.processingStartTime)return"";if(0===this.processingProgress.current||0===this.processingProgress.percentage)return"";const e=Date.now()-this.processingStartTime,t=this.processingProgress.percentage/100;if(t<=0)return"";const s=e/t,i=s-e;if(i<=0)return this.$t("sysStatus.aboutToComplete");const n=Math.ceil(i/1e3);if(n<60)return this.$t("sysStatus.seconds",{count:n});const a=Math.ceil(n/60);if(a<60)return this.$t("sysStatus.minutes",{count:a});const o=Math.floor(a/60),l=a%60;return this.$t("sysStatus.hoursMinutes",{hours:o,minutes:l})},phaseDescription(){const e={fetching:this.$t("sysStatus.phaseFetching"),sorting:this.$t("sysStatus.phaseSorting"),uploading:this.$t("sysStatus.phaseUploading"),finalizing:this.$t("sysStatus.phaseFinalizing"),building:this.$t("sysStatus.phaseBuilding"),downloading:this.$t("sysStatus.phaseDownloading"),restoring_files:this.$t("sysStatus.phaseRestoringFiles"),restoring_settings:this.$t("sysStatus.phaseRestoringSettings"),completed:this.$t("sysStatus.phaseCompleted"),retrying:this.$t("sysStatus.phaseRetrying")};return e[this.processingPhase]||this.processingPhase}},mounted(){this.fetchIndexInfo(),this.clockTimer=window.setInterval(()=>{this.currentTime=new Date},1e3)},beforeUnmount(){this.clockTimer&&(window.clearInterval(this.clockTimer),this.clockTimer=null)},methods:{getChartColor(e){return this.channelColors[e%this.channelColors.length]},getTypeChartColor(e){return this.typeColors[e%this.typeColors.length]},getTrendColor(e){return this.trendColors[e%this.trendColors.length]},formatTrendSeriesName(e){return e?.isOther||"__other__"===e?.name?this.$t("sysStatus.otherChannels"):e?.name||this.$t("sysStatus.unknown")},hexToRgba(e,t){const s=(e||"").replace("#","");if(6!==s.length)return`rgba(37, 99, 235, ${t})`;const i=parseInt(s.slice(0,2),16),n=parseInt(s.slice(2,4),16),a=parseInt(s.slice(4,6),16);return`rgba(${i}, ${n}, ${a}, ${t})`},extractTrendLabelDates(e){const t=String(e||"").match(/\d{4}-\d{2}-\d{2}/g)||[];return t.map(e=>{const[t,s,i]=e.split("-").map(Number);return{year:t,month:s,day:i}})},formatTrendAxisLabel(e){const t=this.extractTrendLabelDates(e);if(0===t.length)return e;const s=(e,t)=>{const s=`${e.month}/${e.day}`;return t?`${e.year}/${s}`:s};if(1===t.length)return s(t[0],this.trendRangeCrossesYear);const[i,n]=t;if(!this.trendRangeCrossesYear)return`${s(i,!1)}-${s(n,!1)}`;const a=i.year===n.year?s(n,!1):s(n,!0);return`${s(i,!0)}-${a}`},openTrendDateDialog(){this.trendDatePickerVisible=!0},handleTrendDateRangeChange(e){Array.isArray(e)&&2===e.length&&e[0]&&e[1]&&(this.trendDatePickerVisible=!1,this.fetchIndexInfo())},getTrendDateRangeParams(){return Array.isArray(this.trendDateRange)&&2===this.trendDateRange.length||(this.trendDateRange=Tu()),{startDate:this.trendDateRange[0],endDate:this.trendDateRange[1]}},async fetchIndexInfo(){this.loading=!0,this.indexInfoError=!1;try{const{startDate:e,endDate:t}=this.getTrendDateRangeParams(),s=new URLSearchParams({action:"info",timezoneOffset:String((new Date).getTimezoneOffset()),trendMaxPoints:"90",trendSeriesLimit:"8",trendStartDate:e,trendEndDate:t}),i=await(0,Rt.A)(`/api/manage/list?${s.toString()}`,{method:"GET"});if(!i.ok)throw new Error("API请求失败");{const e=await i.json();this.indexInfo=e,this.indexInfoLoaded=!0}}catch(e){console.error("获取索引信息失败:",e),this.indexInfoError=!0,this.$message.error(this.$t("sysStatus.fetchIndexFailed"))}finally{this.loading=!1}},async rebuildIndex(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.rebuilding=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentRebuilder=new xu({onProgress:e=>this.handleProgress(e),onError:e=>this.handleError(e)});try{const e=await this.currentRebuilder.rebuild();this.$message.success(this.$t("sysStatus.rebuildSuccess",{count:e.totalFiles.toLocaleString()})),setTimeout(()=>{this.fetchIndexInfo()},1e3)}catch(e){if("ABORTED"!==e.code){const t=e.suggestion?`${e.message}。${e.suggestion}`:e.message;this.$message.error(t),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}}}finally{this.rebuilding=!1,this.isProcessing=!1,this.currentRebuilder=null,this.processingStartTime=null}}},async backupData(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.backing=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentBackupGenerator=new ku({onProgress:e=>this.handleProgress(e)});try{const e=await this.currentBackupGenerator.generateBackup(),t=e.settingsCount>0?this.$t("sysStatus.backupSuccessWithSettings",{fileCount:e.fileCount.toLocaleString(),settingsCount:e.settingsCount}):this.$t("sysStatus.backupSuccess",{count:e.fileCount.toLocaleString()});this.$message.success(t)}catch(e){if("ABORTED"!==e.code){const t=e.suggestion?`${e.message}。${e.suggestion}`:e.message;this.$message.error(t),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}}}finally{this.backing=!1,this.isProcessing=!1,this.currentBackupGenerator=null,this.processingStartTime=null}}},selectRestoreFile(){this.restoring||this.$refs.fileInput.click()},async handleFileSelect(e){const t=e.target.files[0];if(t)if(t.name.endsWith(".json")){try{await this.$confirm(this.$t("sysStatus.restoreConfirmMessage"),this.$t("sysStatus.restoreConfirmTitle"),{confirmButtonText:this.$t("sysStatus.restoreConfirmOk"),cancelButtonText:this.$t("sysStatus.restoreConfirmCancel"),type:"warning"}),await this.restoreData(t)}catch(s){"cancel"!==s&&console.error("确认恢复失败:",s)}e.target.value=""}else this.$message.error(this.$t("sysStatus.selectJsonFile"))},async restoreData(e){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.restoring=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0};try{const s=await e.text();let i;try{i=JSON.parse(s)}catch(t){throw new Error(this.$t("sysStatus.invalidBackupFile"))}this.currentRestoreProcessor=new wu({chunkSize:100,onProgress:e=>this.handleProgress(e),onError:e=>this.handleError(e)});const n=await this.currentRestoreProcessor.restore(i);this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,this.$message.success(this.$t("sysStatus.restoreSuccess",{files:n.restoredFiles,settings:n.restoredSettings})),await new Promise(e=>setTimeout(e,500)),await this.rebuildIndex()}catch(s){if(console.error("恢复数据失败:",s),this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,"ABORTED"!==s.code){const e=s.suggestion?`${s.message}。${s.suggestion}`:s.message;this.$message.error(this.$t("sysStatus.restoreFailed")+": "+e),this.processingError={message:s.message,suggestion:s.suggestion,recoverable:s.recoverable}}}}},formatTime(e){if(!e)return this.$t("sysStatus.unknown");const t=new Date(e);return t.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},getPercentage(e,t){return t&&0!==t?Math.round(e/t*100):0},getTimeAgo(e){if(!e)return"";const t=Date.now(),s=t-e,i=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return a>0?this.$t("sysStatus.daysAgo",{count:a}):n>0?this.$t("sysStatus.hoursAgo",{count:n}):i>0?this.$t("sysStatus.minutesAgo",{count:i}):this.$t("sysStatus.justNow")},handleImageError(e){this.loadErrors[e]=!0},isValidPreview(e,t){return!this.loadErrors[e]&&(!!t?.metadata?.FileType&&(t.metadata.FileType.includes("image")||t.metadata.FileType.includes("video")))},openReleases(){window.open("https://github.com/MarSeventh/CloudFlare-ImgBed/releases","_blank")},isImageFile(e){if(!e)return!1;if(e.metadata?.FileType?.includes("image"))return!0;const t=e.metadata?.FileName||e.id||"",s=t.substring(t.lastIndexOf(".")+1).toLowerCase(),i=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","avif","heic","heif"];return i.includes(s)},isVideoFile(e){if(!e)return!1;if(e.metadata?.FileType?.includes("video"))return!0;const t=e.metadata?.FileName||e.id||"",s=t.substring(t.lastIndexOf(".")+1).toLowerCase(),i=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","m4v","3gp","mpeg","mpg"];return i.includes(s)},openFileInNewTab(e){e?.id&&window.open("/file/"+e.id+"?from=admin","_blank")},handleProgress(e){this.processingPhase=e.phase,this.processingProgress.message=e.message||"",this.processingProgress.current=e.current||0,"fetching"===e.phase?(this.processingProgress.total=e.total||0,e.total&&e.total>0?this.processingProgress.percentage=Math.min(60,e.current/e.total*60):this.processingProgress.percentage=Math.min(50,15*Math.log10(e.current+1))):"sorting"===e.phase?(this.processingProgress.percentage=65,this.processingProgress.total=e.total||this.processingProgress.total):"uploading"===e.phase?(this.processingProgress.total=e.total||0,e.total&&e.total>0&&(this.processingProgress.percentage=70+e.current/e.total*25)):"finalizing"===e.phase?this.processingProgress.percentage=97:"building"===e.phase?this.processingProgress.percentage=80:"downloading"===e.phase?this.processingProgress.percentage=95:"restoring_files"===e.phase?(this.processingProgress.total=e.total||0,this.processingProgress.percentage=e.percentage||0):"restoring_settings"===e.phase?(this.processingProgress.total=e.total||0,this.processingProgress.percentage=e.percentage||80):"completed"===e.phase?this.processingProgress.percentage=100:"retrying"===e.phase&&(this.processingProgress.message=e.message)},handleError(e){console.error("批量操作错误:",e),this.processingError={message:e.message,suggestion:e.suggestion,recoverable:e.recoverable}},cancelOperation(){this.currentRebuilder&&(this.currentRebuilder.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentBackupGenerator&&(this.currentBackupGenerator.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentRestoreProcessor&&(this.currentRestoreProcessor.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild")))},retryOperation(){this.processingError=null,this.rebuilding?(this.rebuilding=!1,this.isProcessing=!1,this.$nextTick(()=>{this.rebuildIndex()})):this.backing&&(this.backing=!1,this.isProcessing=!1,this.$nextTick(()=>{this.backupData()}))},dismissError(){this.processingError=null}}};const Pu=(0,d.A)(Mu,[["render",Ot],["__scopeId","data-v-776bcef4"]]);var Du=Pu,Au=s(59869),$u=(s(70415),s(73565),s(82006)),Lu=(s(98642),s(81418)),Vu=(s(50333),s(39623)),Eu=(s(29092),s(63003),s(76018)),Iu=(s(96808),s(67819),s(55558)),Uu=(s(10456),s(12687)),Ou=(s(18785),s(97769));const Ru=["onClick"];function Wu(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=Ou.A;return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["custom-select",{"is-open":o.isOpen}]),style:(0,n.Tr)({width:s.width})},[(0,i.Lk)("div",{class:"custom-select-trigger",onClick:t[0]||(t[0]=(...e)=>l.toggleDropdown&&l.toggleDropdown(...e))},[(0,i.Lk)("span",{class:(0,n.C4)(["custom-select-value",{"is-placeholder":!s.modelValue}])},(0,n.v_)(l.displayLabel),3),(0,i.bF)(r,{icon:"chevron-down",class:"custom-select-arrow"})]),(0,i.bF)(C.eB,{name:"dropdown-fade"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:"custom-select-dropdown",onClick:t[1]||(t[1]=(0,C.D$)(()=>{},["stop"]))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s.options,t=>((0,i.uX)(),(0,i.CE)("div",{key:t.value,class:(0,n.C4)(["custom-select-option",{"is-selected":s.modelValue===t.value}]),onClick:e=>l.selectOption(t.value)},[(0,i.RG)(e.$slots,"option",{option:t},()=>[t.channelType?((0,i.uX)(),(0,i.Wv)(c,{key:0,type:t.channelType,class:(0,n.C4)(["option-icon",t.iconClass])},null,8,["type","class"])):t.icon?((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:t.icon,class:(0,n.C4)(["option-icon",t.iconClass])},null,8,["icon","class"])):(0,i.Q3)("",!0),(0,i.Lk)("span",null,(0,n.v_)(t.label),1)],!0)],10,Ru))),128))],512),[[C.aG,o.isOpen]])]),_:3})],6)}var Bu={name:"CustomSelect",components:{ChannelIcon:Ou.A},props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:""},width:{type:String,default:"160px"}},emits:["update:modelValue","change"],data(){return{isOpen:!1}},computed:{resolvedPlaceholder(){return this.placeholder||this.$t("common.select")},displayLabel(){const e=this.options.find(e=>e.value===this.modelValue);return e?e.label:this.resolvedPlaceholder}},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside)},methods:{toggleDropdown(){this.isOpen=!this.isOpen},selectOption(e){this.$emit("update:modelValue",e),this.$emit("change",e),this.isOpen=!1},handleClickOutside(e){this.$el.contains(e.target)||(this.isOpen=!1)}}};const zu=(0,d.A)(Bu,[["render",Wu],["__scopeId","data-v-b9420432"]]);var Nu=zu;const ju={class:"upload-settings"},Hu={class:"page-header"},qu={class:"first-title"},Xu={class:"header-actions"},Ku={class:"group-header"},Qu={class:"group-title"},Yu={key:0,class:"load-balance-switch"},Gu={class:"switch-label"},Ju={key:0,class:"channel-cards"},Zu=["onMousemove","onMouseleave"],ep={class:"card-header"},tp={class:"card-title"},sp={class:"channel-name"},ip={class:"card-body"},np={class:"card-info"},ap={class:"info-item"},op={class:"info-text"},lp={key:0,class:"info-item"},rp={class:"info-text"},cp={key:1,class:"info-item"},dp=["title"],hp={class:"info-item"},up={class:"info-text"},pp={key:0,class:"info-item"},gp=["title"],fp={class:"info-item"},mp={class:"info-text"},bp={class:"info-item"},yp={class:"info-text"},xp={class:"info-item"},vp={class:"info-text"},kp={class:"info-item"},_p=["title"],wp={key:0,class:"info-item"},Cp=["title"],Sp={key:0,class:"quota-mini"},Fp={class:"quota-text"},Tp={class:"card-actions"},Mp={key:1,class:"empty-tip"},Pp={class:"channel-type-option"},Dp={key:0,class:"form-warning",style:{"margin-top":"0"}},Ap=["innerHTML"],$p={class:"form-warning"},Lp={class:"quota-label"},Vp={class:"quota-status"};function Ep(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Nu,h=K.S2,u=Ou.A,p=Uu.u,f=Iu.qi,m=_.ve,b=Eu.P9,y=Eu.AV,x=$u.xE,k=Vu.WK,S=Lu.lq,F=$u.US,T=w.kZ,M=Au.MF,P=Au.TS,D=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",ju,[(0,i.Lk)("div",Hu,[(0,i.Lk)("h3",qu,[(0,i.eW)((0,n.v_)(e.$t("sysUpload.title"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.titleTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Xu,[(0,i.bF)(d,{modelValue:o.channelFilter,"onUpdate:modelValue":t[0]||(t[0]=e=>o.channelFilter=e),options:l.filterOptions,placeholder:e.$t("sysUpload.filterPlaceholder"),width:"160px"},null,8,["modelValue","options","placeholder"]),(0,i.bF)(h,{type:"primary",onClick:t[1]||(t[1]=e=>o.showAddDialog=!0),class:"add-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"plus",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysUpload.addChannel")),1)]),_:1})])]),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.filteredChannels,s=>((0,i.uX)(),(0,i.CE)("div",{key:s.value,class:"channel-group"},[(0,i.Lk)("div",Ku,[(0,i.Lk)("div",Qu,[(0,i.bF)(u,{type:s.value,class:"group-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,n.v_)(s.label),1),(0,i.bF)(p,{size:"small",type:"info",class:"channel-count"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelList(s.value).length),1)]),_:2},1024)]),l.hasLoadBalance(s.value)?((0,i.uX)(),(0,i.CE)("div",Yu,[(0,i.Lk)("span",Gu,(0,n.v_)(e.$t("sysUpload.loadBalance")),1),(0,i.bF)(f,{modelValue:l.getSettings(s.value).loadBalance.enabled,"onUpdate:modelValue":e=>l.getSettings(s.value).loadBalance.enabled=e,size:"small",onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])])):(0,i.Q3)("",!0)]),l.getChannelList(s.value).length>0?((0,i.uX)(),(0,i.CE)("div",Ju,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.getChannelList(s.value),(a,o)=>((0,i.uX)(),(0,i.CE)("div",{key:a.name||o,class:(0,n.C4)(["channel-card",[s.value,{disabled:!a.enabled,fixed:a.fixed}]]),onMousemove:e=>l.handleCardMouseMove(e,s.value,o),onMouseleave:e=>l.handleCardMouseLeave(s.value,o)},[(0,i.Lk)("div",{class:"card-glow",ref_for:!0,ref:`glow-${s.value}-${o}`},null,512),(0,i.Lk)("div",ep,[(0,i.Lk)("div",tp,[(0,i.Lk)("span",sp,(0,n.v_)(a.name||e.$t("sysUpload.unnamedChannel")),1),a.fixed?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.envVariable")),1)]),_:1})):(0,i.Q3)("",!0)]),(0,i.bF)(f,{modelValue:a.enabled,"onUpdate:modelValue":e=>a.enabled=e,size:"small",onClick:t[2]||(t[2]=(0,C.D$)(()=>{},["stop"])),onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])]),(0,i.Lk)("div",ip,[(0,i.Lk)("div",np,["telegram"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.Lk)("div",ap,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",op,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),a.chatId?((0,i.uX)(),(0,i.CE)("div",lp,[(0,i.bF)(r,{icon:"comments",class:"info-icon"}),(0,i.Lk)("span",rp,"Channel: "+(0,n.v_)(l.maskText(a.chatId)),1)])):(0,i.Q3)("",!0)],64)):"cfr2"===s.value?((0,i.uX)(),(0,i.CE)("div",cp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl||e.$t("sysUpload.notSet")),9,dp)])):"s3"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.Lk)("div",hp,[(0,i.bF)(r,{icon:"server",class:"info-icon"}),(0,i.Lk)("span",up,(0,n.v_)(a.bucketName||e.$t("sysUpload.notSet")),1)]),a.endpoint?((0,i.uX)(),(0,i.CE)("div",pp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.endpoint},(0,n.v_)(a.endpoint),9,gp)])):(0,i.Q3)("",!0)],64)):"discord"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.Lk)("div",fp,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",mp,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),(0,i.Lk)("div",bp,[(0,i.bF)(r,{icon:"hashtag",class:"info-icon"}),(0,i.Lk)("span",yp,"Channel: "+(0,n.v_)(l.maskText(a.channelId)),1)]),a.isNitro?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"success"},{default:(0,i.k6)(()=>[...t[78]||(t[78]=[(0,i.eW)("Nitro",-1)])]),_:1})):(0,i.Q3)("",!0)],64)):"huggingface"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.Lk)("div",xp,[(0,i.bF)(r,{icon:"database",class:"info-icon"}),(0,i.Lk)("span",vp,(0,n.v_)(a.repo||e.$t("sysUpload.notSet")),1)]),a.isPrivate?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo")),1)]),_:1})):(0,i.Q3)("",!0)],64)):"webdav"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.Lk)("div",kp,[(0,i.bF)(r,{icon:"folder",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.baseUrl},(0,n.v_)(a.baseUrl||e.$t("sysUpload.notSet")),9,_p)]),a.publicUrl?((0,i.uX)(),(0,i.CE)("div",wp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl),9,Cp)])):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),a.quota?.enabled?((0,i.uX)(),(0,i.CE)("div",Sp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(a),status:l.getQuotaStatus(a),"stroke-width":6},null,8,["percentage","status"]),(0,i.Lk)("span",Fp,(0,n.v_)(l.getQuotaText(a)),1)])):(0,i.Q3)("",!0)]),(0,i.Lk)("div",Tp,[(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:e=>l.openDetailDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"eye",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.detail")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:e=>l.openEditDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"edit",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"danger",size:"small",onClick:e=>l.deleteChannel(s.value,o),disabled:a.fixed},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"trash-alt",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(e.$t("sysUpload.deleteBtn")),1)]),_:1},8,["onClick","disabled"])])],42,Zu))),128))])):((0,i.uX)(),(0,i.CE)("div",Mp,[(0,i.bF)(r,{icon:"inbox",class:"empty-icon"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysUpload.noChannels",{type:s.label})),1)]))]))),128)),(0,i.bF)(T,{modelValue:o.showAddDialog,"onUpdate:modelValue":t[35]||(t[35]=e=>o.showAddDialog=e),title:e.$t("sysUpload.addDialogTitle"),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetAddForm},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[34]||(t[34]=e=>o.showAddDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cancel")),1)]),_:1}),"cfr2"!==o.newChannel.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,type:"primary",onClick:l.confirmAddChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.confirmAdd")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.newChannel,"label-position":"top",ref:"addForm",rules:l.addRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{label:e.$t("sysUpload.channelTypeLabel"),prop:"type"},{default:(0,i.k6)(()=>[(0,i.bF)(y,{modelValue:o.newChannel.type,"onUpdate:modelValue":t[3]||(t[3]=e=>o.newChannel.type=e),placeholder:e.$t("sysUpload.channelTypePlaceholder"),style:{width:"100%"},onChange:l.onChannelTypeChange},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.addableChannels,e=>((0,i.uX)(),(0,i.Wv)(b,{key:e.value,label:e.label,value:e.value},{default:(0,i.k6)(()=>[(0,i.Lk)("span",Pp,[(0,i.bF)(u,{type:e.value,class:"select-option-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,n.v_)(e.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","onChange"])]),_:1},8,["label"]),"cfr2"===o.newChannel.type?((0,i.uX)(),(0,i.CE)("div",Dp,[(0,i.bF)(r,{icon:"info-circle",style:{"margin-right":"6px"}}),(0,i.Lk)("span",{innerHTML:e.$t("sysUpload.r2ConfigNote")},null,8,Ap)])):((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.channelNameImmutableTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.name,"onUpdate:modelValue":t[4]||(t[4]=e=>o.newChannel.name=e),placeholder:e.$t("sysUpload.channelNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),"telegram"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":t[5]||(t[5]=e=>o.newChannel.botToken=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.chatId,"onUpdate:modelValue":t[6]||(t[6]=e=>o.newChannel.chatId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.chatIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>o.newChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"s3"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:e.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.endpoint,"onUpdate:modelValue":t[8]||(t[8]=e=>o.newChannel.endpoint=e),placeholder:e.$t("sysUpload.endpointPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.cdnDomain,"onUpdate:modelValue":t[9]||(t[9]=e=>o.newChannel.cdnDomain=e),placeholder:e.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.bucketName,"onUpdate:modelValue":t[10]||(t[10]=e=>o.newChannel.bucketName=e),placeholder:e.$t("sysUpload.bucketNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.region,"onUpdate:modelValue":t[11]||(t[11]=e=>o.newChannel.region=e),placeholder:e.$t("sysUpload.bucketRegionPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.accessKeyId,"onUpdate:modelValue":t[12]||(t[12]=e=>o.newChannel.accessKeyId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.accessKeyIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.secretAccessKey,"onUpdate:modelValue":t[13]||(t[13]=e=>o.newChannel.secretAccessKey=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.secretAccessKeyPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.pathStyle,"onUpdate:modelValue":t[14]||(t[14]=e=>o.newChannel.pathStyle=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":t[15]||(t[15]=e=>o.newChannel.quota.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":t[16]||(t[16]=e=>o.newChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":t[17]||(t[17]=e=>o.newChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":t[18]||(t[18]=e=>o.newChannel.botToken=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.channelId,"onUpdate:modelValue":t[19]||(t[19]=e=>o.newChannel.channelId=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.channelIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":t[20]||(t[20]=e=>o.newChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isNitro,"onUpdate:modelValue":t[21]||(t[21]=e=>o.newChannel.isNitro=e)},null,8,["modelValue"])]),_:1}),(0,i.Lk)("div",$p,[(0,i.bF)(r,{icon:"exclamation-triangle",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysUpload.discordWarning")),1)])],64)):"huggingface"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:e.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.repo,"onUpdate:modelValue":t[22]||(t[22]=e=>o.newChannel.repo=e),placeholder:e.$t("sysUpload.repoNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.token,"onUpdate:modelValue":t[23]||(t[23]=e=>o.newChannel.token=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.accessTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isPrivate,"onUpdate:modelValue":t[24]||(t[24]=e=>o.newChannel.isPrivate=e)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:e.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.baseUrl,"onUpdate:modelValue":t[25]||(t[25]=e=>o.newChannel.baseUrl=e),placeholder:e.$t("sysUpload.webdavBaseUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.username,"onUpdate:modelValue":t[26]||(t[26]=e=>o.newChannel.username=e),placeholder:e.$t("sysUpload.webdavUsernamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.password,"onUpdate:modelValue":t[27]||(t[27]=e=>o.newChannel.password=e),type:"password","show-password":"",placeholder:e.$t("sysUpload.webdavPasswordPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.publicUrl,"onUpdate:modelValue":t[28]||(t[28]=e=>o.newChannel.publicUrl=e),placeholder:e.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.newChannel.headersText,"onUpdate:modelValue":t[29]||(t[29]=e=>o.newChannel.headersText=e),type:"textarea",autosize:{minRows:2},placeholder:e.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.createDirectory,"onUpdate:modelValue":t[30]||(t[30]=e=>o.newChannel.createDirectory=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":t[31]||(t[31]=e=>o.newChannel.quota.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":t[32]||(t[32]=e=>o.newChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":t[33]||(t[33]=e=>o.newChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)],64))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showDetailDialog,"onUpdate:modelValue":t[37]||(t[37]=e=>o.showDetailDialog=e),title:e.$t("sysUpload.detailDialogTitle",{name:o.currentChannel?.name||""}),class:"channel-dialog",onClosed:l.resetDetailData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[36]||(t[36]=e=>o.showDetailDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.closeBtn")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.openEditFromDetail},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(P,{column:1,border:""},{default:(0,i.k6)(()=>[(0,i.bF)(M,{label:e.$t("sysUpload.channelNameDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.name),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.channelTypeDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelTypeLabel(o.currentChannelType)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.statusLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:o.currentChannel?.enabled?"success":"info"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.enabled?e.$t("sysUpload.enabled"):e.$t("sysUpload.disabled")),1)]),_:1},8,["type"])]),_:1},8,["label"]),o.currentChannel?.fixed?((0,i.uX)(),(0,i.Wv)(M,{key:0,label:e.$t("sysUpload.configSource")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.envVariable")),1)]),_:1})]),_:1},8,["label"])):(0,i.Q3)("",!0),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(M,{label:e.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.chatIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.chatId,6)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.Wv)(M,{key:2,label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.publicUrl||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"])):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(M,{label:e.$t("sysUpload.endpointLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.endpoint,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.cdnDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.cdnDomain||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.bucketName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.bucketName),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.bucketRegion")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.region),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.pathStyle")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.pathStyle?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(M,{label:e.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.channelIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.channelId,6)),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.nitroMember")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isNitro?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(M,{label:e.$t("sysUpload.repoName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.repo),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.privateRepo")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isPrivate?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:6},[(0,i.bF)(M,{label:e.$t("sysUpload.webdavBaseUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.baseUrl,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":o.currentChannel?.publicUrl||e.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.username||e.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{"model-value":l.formatHeaders(o.currentChannel?.headers),type:"textarea",autosize:{minRows:2},readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.webdavCreateDirectory")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(!1!==o.currentChannel?.createDirectory?e.$t("sysUpload.isPathStyle"):e.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):(0,i.Q3)("",!0),o.currentChannel?.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:7},[(0,i.bF)(M,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.limitGB)+" GB",1)]),_:1},8,["label"]),(0,i.bF)(M,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.threshold)+"%",1)]),_:1},8,["label"]),(0,i.bF)(M,null,{label:(0,i.k6)(()=>[(0,i.Lk)("span",Lp,[(0,i.eW)((0,n.v_)(e.$t("sysUpload.currentUsage"))+" ",1),(0,i.bF)(h,{link:"",type:"primary",onClick:l.refreshQuota,class:"refresh-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt",class:(0,n.C4)({"fa-spin":o.quotaLoading})},null,8,["class"])]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",Vp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(o.currentChannel),status:l.getQuotaStatus(o.currentChannel),"stroke-width":16,"text-inside":!0,format:()=>l.getQuotaText(o.currentChannel)},null,8,["percentage","status","format"]),(0,i.Lk)("div",{class:(0,n.C4)(["quota-info",{"quota-warning":l.isQuotaExceeded(o.currentChannel)}])},(0,n.v_)(l.getQuotaStatusText(o.currentChannel)),3)])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showEditDialog,"onUpdate:modelValue":t[77]||(t[77]=e=>o.showEditDialog=e),title:e.$t("sysUpload.editDialogTitle",{name:o.editChannel?.name||""}),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetEditData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:t[76]||(t[76]=e=>o.showEditDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cancel")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.confirmEditChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.saveChanges")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.editChannel,"label-position":"top",ref:"editForm",rules:l.editRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.channelNameEditDisabledTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.name,"onUpdate:modelValue":t[38]||(t[38]=e=>o.editChannel.name=e),disabled:""},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.enableChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.enabled,"onUpdate:modelValue":t[39]||(t[39]=e=>o.editChannel.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":t[40]||(t[40]=e=>o.editChannel.botToken=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.chatId,"onUpdate:modelValue":t[41]||(t[41]=e=>o.editChannel.chatId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":t[42]||(t[42]=e=>o.editChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:e.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":t[43]||(t[43]=e=>o.editChannel.publicUrl=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[44]||(t[44]=e=>o.editChannel.quota.enabled=e),onChange:t[45]||(t[45]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[46]||(t[46]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[47]||(t[47]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:e.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.endpoint,"onUpdate:modelValue":t[48]||(t[48]=e=>o.editChannel.endpoint=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.cdnDomain,"onUpdate:modelValue":t[49]||(t[49]=e=>o.editChannel.cdnDomain=e),placeholder:e.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.bucketName,"onUpdate:modelValue":t[50]||(t[50]=e=>o.editChannel.bucketName=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.region,"onUpdate:modelValue":t[51]||(t[51]=e=>o.editChannel.region=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.accessKeyId,"onUpdate:modelValue":t[52]||(t[52]=e=>o.editChannel.accessKeyId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.secretAccessKey,"onUpdate:modelValue":t[53]||(t[53]=e=>o.editChannel.secretAccessKey=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.pathStyle,"onUpdate:modelValue":t[54]||(t[54]=e=>o.editChannel.pathStyle=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[55]||(t[55]=e=>o.editChannel.quota.enabled=e),onChange:t[56]||(t[56]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[57]||(t[57]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[58]||(t[58]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:e.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":t[59]||(t[59]=e=>o.editChannel.botToken=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.channelId,"onUpdate:modelValue":t[60]||(t[60]=e=>o.editChannel.channelId=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":t[61]||(t[61]=e=>o.editChannel.proxyUrl=e),placeholder:e.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isNitro,"onUpdate:modelValue":t[62]||(t[62]=e=>o.editChannel.isNitro=e)},null,8,["modelValue"])]),_:1})],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:e.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.repo,"onUpdate:modelValue":t[63]||(t[63]=e=>o.editChannel.repo=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.token,"onUpdate:modelValue":t[64]||(t[64]=e=>o.editChannel.token=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isPrivate,"onUpdate:modelValue":t[65]||(t[65]=e=>o.editChannel.isPrivate=e)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(x,{label:e.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.baseUrl,"onUpdate:modelValue":t[66]||(t[66]=e=>o.editChannel.baseUrl=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.username,"onUpdate:modelValue":t[67]||(t[67]=e=>o.editChannel.username=e),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.password,"onUpdate:modelValue":t[68]||(t[68]=e=>o.editChannel.password=e),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":t[69]||(t[69]=e=>o.editChannel.publicUrl=e),placeholder:e.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.editChannel.headersText,"onUpdate:modelValue":t[70]||(t[70]=e=>o.editChannel.headersText=e),type:"textarea",autosize:{minRows:2},placeholder:e.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(c,{content:e.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.createDirectory,"onUpdate:modelValue":t[71]||(t[71]=e=>o.editChannel.createDirectory=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":t[72]||(t[72]=e=>o.editChannel.quota.enabled=e),onChange:t[73]||(t[73]=e=>l.onQuotaEnabledChange(e,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:e.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":t[74]||(t[74]=e=>o.editChannel.quota.limitGB=e),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:e.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":t[75]||(t[75]=e=>o.editChannel.quota.threshold=e),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"])])),[[D,o.loading]])}var Ip={components:{ChannelIcon:Ou.A,CustomSelect:Nu},data(){return{channelFilter:"",channels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],addableChannels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],telegramSettings:{loadBalance:{enabled:!1},channels:[]},cfr2Settings:{channels:[]},s3Settings:{loadBalance:{enabled:!1},channels:[]},discordSettings:{loadBalance:{enabled:!1},channels:[]},huggingfaceSettings:{loadBalance:{enabled:!1},channels:[]},webdavSettings:{loadBalance:{enabled:!1},channels:[]},showAddDialog:!1,showDetailDialog:!1,showEditDialog:!1,currentChannelType:"",currentChannelIndex:-1,currentChannel:null,editChannel:{},newChannel:{type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0},quotaStats:{},quotaLoading:!1,loading:!1}},computed:{filterOptions(){return[{value:"",label:this.$t("common.all")},...this.channels.map(e=>({value:e.value,label:e.label,channelType:e.value}))]},filteredChannels(){return this.channelFilter?this.channels.filter(e=>e.value===this.channelFilter):this.channels},addRules(){return{type:[{required:!0,message:this.$t("sysUpload.channelTypePlaceholder"),trigger:"change"}],name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}},editRules(){return{name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}}},methods:{handleCardMouseMove(e,t,s){const i=e.currentTarget,n=i.getBoundingClientRect(),a=e.clientX-n.left,o=e.clientY-n.top,l=`glow-${t}-${s}`,r=this.$refs[l];r&&r[0]&&(r[0].style.opacity="1",r[0].style.left=`${a}px`,r[0].style.top=`${o}px`)},handleCardMouseLeave(e,t){const s=`glow-${e}-${t}`,i=this.$refs[s];i&&i[0]&&(i[0].style.opacity="0")},getChannelTypeLabel(e){const t=this.channels.find(t=>t.value===e);return t?t.label:e},getChannelList(e){return this.getSettings(e)?.channels||[]},getSettings(e){const t={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};return t[e]},hasLoadBalance(e){return["telegram","s3","discord","huggingface","webdav"].includes(e)},maskText(e,t=4){return e?e.length<=2*t?"****":e.slice(0,t)+"****"+e.slice(-t):this.$t("sysUpload.notSet")},formatHeaders(e){return!e||"object"===typeof e&&0===Object.keys(e).length?this.$t("sysUpload.notSet"):"string"===typeof e?e:JSON.stringify(e,null,2)},headersToText(e){return e?"string"===typeof e?e:JSON.stringify(e,null,2):""},parseHeadersText(e){if(!e||!e.trim())return{};try{const t=JSON.parse(e);return!t||"object"!==typeof t||Array.isArray(t)?null:t}catch(t){return null}},openDetailDialog(e,t){this.currentChannelType=e,this.currentChannelIndex=t,this.currentChannel=this.getChannelList(e)[t],this.showDetailDialog=!0},openEditDialog(e,t){this.currentChannelType=e,this.currentChannelIndex=t;const s=this.getChannelList(e)[t];this.editChannel=JSON.parse(JSON.stringify(s)),"webdav"===e&&(this.editChannel.headersText=this.headersToText(this.editChannel.headers),this.editChannel.createDirectory=!1!==this.editChannel.createDirectory),this.editChannel.quota||(this.editChannel.quota={enabled:!1,limitGB:10,threshold:95}),this.showEditDialog=!0},openEditFromDetail(){this.showDetailDialog=!1,this.openEditDialog(this.currentChannelType,this.currentChannelIndex)},resetAddForm(){this.newChannel={type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},resetDetailData(){this.currentChannel=null},resetEditData(){this.editChannel={}},onChannelTypeChange(){const{type:e,name:t}=this.newChannel;this.newChannel={type:e,name:t,enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},confirmAddChannel(){this.$refs.addForm.validate(e=>{if(!e)return;const{type:t,name:s}=this.newChannel,i=this.getSettings(t),n=["Telegram_env","R2_env","S3_env","Discord_env","HuggingFace_env","WebDAV_env"];if(n.includes(s))return void this.$message.warning(this.$t("sysUpload.reservedName"));const a=i.channels.some(e=>e.name===s);if(a)return void this.$message.warning(this.$t("sysUpload.duplicateName"));let o={id:i.channels.length+1,name:this.newChannel.name,type:t,savePath:"database",enabled:!0,fixed:!1};if("telegram"===t)Object.assign(o,{botToken:this.newChannel.botToken,chatId:this.newChannel.chatId,proxyUrl:this.newChannel.proxyUrl});else if("s3"===t)Object.assign(o,{endpoint:this.newChannel.endpoint,cdnDomain:this.newChannel.cdnDomain,bucketName:this.newChannel.bucketName,region:this.newChannel.region,accessKeyId:this.newChannel.accessKeyId,secretAccessKey:this.newChannel.secretAccessKey,pathStyle:this.newChannel.pathStyle,quota:{...this.newChannel.quota}});else if("discord"===t)Object.assign(o,{botToken:this.newChannel.botToken,channelId:this.newChannel.channelId,proxyUrl:this.newChannel.proxyUrl,isNitro:this.newChannel.isNitro});else if("huggingface"===t)Object.assign(o,{repo:this.newChannel.repo,token:this.newChannel.token,isPrivate:this.newChannel.isPrivate});else if("webdav"===t){const e=this.parseHeadersText(this.newChannel.headersText);if(null===e)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));Object.assign(o,{baseUrl:this.newChannel.baseUrl,username:this.newChannel.username,password:this.newChannel.password,publicUrl:this.newChannel.publicUrl,headers:e,createDirectory:!1!==this.newChannel.createDirectory,quota:{...this.newChannel.quota}})}i.channels.push(o),this.showAddDialog=!1,this.saveSettings()})},confirmEditChannel(){this.$refs.editForm.validate(e=>{if(!e)return;const t=this.getSettings(this.currentChannelType),s=this.currentChannelIndex,i=t.channels[s]?.name||this.editChannel.name,n={...this.editChannel,name:i};if("webdav"===this.currentChannelType){const e=this.parseHeadersText(n.headersText);if(null===e)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));n.headers=e,n.createDirectory=!1!==n.createDirectory,delete n.headersText}t.channels[this.currentChannelIndex]=n,this.showEditDialog=!1,this.saveSettings()})},deleteChannel(e,t){const s=this.getChannelList(e)[t];s.fixed?this.$message.warning(this.$t("sysUpload.fixedChannelCannotDelete")):this.$confirm(this.$t("sysUpload.deleteChannelConfirm"),this.$t("common.warning"),{confirmButtonText:this.$t("common.confirm"),cancelButtonText:this.$t("common.cancel"),type:"warning"}).then(()=>{const s=this.getSettings(e);s.channels.splice(t,1),s.channels.forEach((e,t)=>{e.id=t+1}),this.saveSettings()}).catch(()=>{})},saveSettings(){const e={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};(0,Rt.A)("/api/manage/sysConfig/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(()=>{this.$message.success(this.$t("sysOthers.settingsSaved"))})},async refreshQuota(){this.quotaLoading=!0;try{const e=await(0,Rt.A)("/api/manage/quota",{method:"POST"}),t=await e.json();if(t.success)this.quotaStats=t.channelStats||{};else{const e=await(0,Rt.A)("/api/manage/quota"),t=await e.json();t.success&&(this.quotaStats=t.quotaStats||{})}}catch(e){console.error("Failed to refresh quota stats:",e)}finally{this.quotaLoading=!1}},async loadQuotaStats(){try{const e=await(0,Rt.A)("/api/manage/quota"),t=await e.json();t.success&&(this.quotaStats=t.quotaStats||{})}catch(e){console.error("Failed to load quota stats:",e)}},getChannelUsedGB(e){const t=this.quotaStats[e.name];return t?(t.usedMB||0)/1024:0},getQuotaPercentage(e){const t=this.getChannelUsedGB(e),s=e.quota?.limitGB||10,i=t/s*100;return Math.min(100,Math.round(10*i)/10)},getQuotaStatus(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s?"exception":t>=80?"warning":"success"},getQuotaText(e){const t=this.getChannelUsedGB(e),s=e.quota?.limitGB||10;return`${t.toFixed(2)} / ${s} GB`},isQuotaExceeded(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s},getQuotaStatusText(e){const t=this.getQuotaPercentage(e),s=e.quota?.threshold||95;return t>=s?`⚠️ 已达到容量阈值 (${s}%),渠道写入已暂停`:t>=80?"⚡ 容量使用较高,接近阈值":"✓ 容量正常"},async onQuotaEnabledChange(e,t){if(e&&t.name){const e=this.quotaStats[t.name];e||this.$confirm(this.$t("sysUpload.quotaInitConfirm"),this.$t("sysUpload.quotaInitTitle"),{confirmButtonText:this.$t("sysUpload.quotaInitConfirmBtn"),cancelButtonText:this.$t("sysUpload.quotaInitCancelBtn"),type:"info"}).then(async()=>{await this.recalculateQuota()}).catch(()=>{this.$message.info(this.$t("sysUpload.quotaInitLater"))})}},async recalculateQuota(){this.quotaLoading=!0;try{this.$message.info(this.$t("sysUpload.quotaCalculating"));const e=await(0,Rt.A)("/api/manage/quota",{method:"POST"}),t=await e.json();t.success?(this.quotaStats=t.channelStats||{},this.$message.success(this.$t("sysUpload.quotaCalculateSuccess"))):this.$message.error(this.$t("sysUpload.quotaCalculateError")+(t.error||""))}catch(e){console.error("Failed to recalculate quota:",e),this.$message.error(this.$t("sysUpload.quotaCalculateFailed"))}finally{this.quotaLoading=!1}}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/upload").then(e=>e.json()).then(e=>{this.telegramSettings=e.telegram,e.cfr2&&e.cfr2.channels&&(e.cfr2.channels=e.cfr2.channels.map(e=>({...e,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.cfr2Settings=e.cfr2,e.s3&&e.s3.channels&&(e.s3.channels=e.s3.channels.map(e=>({...e,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.s3Settings=e.s3,e.discord&&e.discord.channels&&(e.discord.channels=e.discord.channels.map(e=>({...e,proxyUrl:e.proxyUrl||""}))),this.discordSettings=e.discord||{loadBalance:{},channels:[]},e.huggingface&&e.huggingface.channels&&(e.huggingface.channels=e.huggingface.channels.map(e=>({...e,isPrivate:e.isPrivate||!1}))),this.huggingfaceSettings=e.huggingface||{loadBalance:{},channels:[]},e.webdav&&e.webdav.channels&&(e.webdav.channels=e.webdav.channels.map(e=>({...e,username:e.username||"",password:e.password||"",publicUrl:e.publicUrl||"",headers:e.headers||{},createDirectory:!1!==e.createDirectory,quota:e.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.webdavSettings=e.webdav||{loadBalance:{},channels:[]},this.loadQuotaStats()}).finally(()=>{this.loading=!1})}};const Up=(0,d.A)(Ip,[["render",Ep],["__scopeId","data-v-0082a519"]]);var Op=Up,Rp=s(98469);s(49187);const Wp={class:"save-text"};function Bp(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.Wv)(C.eB,{name:"fade-up"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:(0,n.C4)(["floating-save-btn",{"is-loading":s.loading}]),onClick:t[0]||(t[0]=(...e)=>l.handleClick&&l.handleClick(...e))},[s.loading?((0,i.uX)(),(0,i.Wv)(r,{key:0,icon:"spinner",spin:""})):((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:"save"})),(0,i.Lk)("span",Wp,(0,n.v_)(s.loading?e.$t("floatingSave.saving"):e.$t("floatingSave.save")),1)],2),[[C.aG,o.visible]])]),_:1})}var zp={name:"FloatingSaveButton",emits:["click"],props:{loading:{type:Boolean,default:!1},show:{type:Boolean,default:!0}},data(){return{visible:!1}},watch:{show:{immediate:!0,handler(e){e?setTimeout(()=>{this.visible=!0},600):this.visible=!1}}},methods:{handleClick(){this.loading||this.$emit("click")}}};const Np=(0,d.A)(zp,[["render",Bp],["__scopeId","data-v-9cef95d2"]]);var jp=Np,Hp=s(84757);s(5802),s(64752),s(38736);const qp={class:"security-settings"},Xp={class:"first-settings"},Kp={class:"first-title"},Qp={class:"second-title"},Yp={style:{display:"flex",gap:"8px",width:"100%"}},Gp={class:"second-title"},Jp={style:{display:"flex",gap:"8px",width:"100%"}},Zp={class:"second-title token-title"},eg={class:"token-actions"},tg={class:"token-table-container"},sg={class:"table-cell-content"},ig={class:"table-cell-content"},ng={class:"token-display"},ag={class:"table-cell-content"},og={class:"table-cell-content"},lg={class:"table-cell-content"},rg={class:"table-cell-content"},cg={class:"table-cell-content action-buttons"},dg={class:"first-settings"},hg={class:"first-title"},ug={class:"second-title"},pg={class:"second-title"},gg={class:"query-param-list"},fg={class:"query-param-list"},mg={class:"first-settings"},bg={class:"first-title"},yg={class:"second-title"},xg={class:"second-title"},vg={class:"second-title"},kg={class:"second-title"},_g={class:"form-item-hint"},wg={class:"form-item-hint"},Cg={style:{display:"flex",gap:"10px",width:"100%"}},Sg={class:"dialog-footer"},Fg={style:{display:"flex",gap:"10px",width:"100%"}},Tg={class:"dialog-footer"},Mg={class:"token-result"},Pg={style:{"margin-bottom":"15px",color:"#e6a23c"}},Dg={class:"dialog-footer"};function Ag(e,t,s,a,o,l){const r=Vu.WK,c=Rp.dI,d=$u.xE,h=$u.US,u=(0,i.g2)("font-awesome-icon"),p=K.S2,f=Hp.o8,m=Uu.u,b=Hp.Up,y=g.R7,x=Iu.qi,k=Eu.P9,_=Eu.AV,S=Lu.lq,F=jp,T=Rp.o5,M=w.kZ,P=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",qp,[(0,i.Lk)("div",Xp,[(0,i.Lk)("h3",Kp,(0,n.v_)(e.$t("sysSecurity.authManagement")),1),(0,i.Lk)("h4",Qp,(0,n.v_)(e.$t("sysSecurity.userAuth")),1),(0,i.bF)(h,{model:o.authSettings.user,rules:l.userPassRules,ref:"userPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.uploadPassword"),prop:"authCode"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Yp,[(0,i.bF)(r,{modelValue:o.authSettings.user.authCode,"onUpdate:modelValue":t[0]||(t[0]=e=>o.authSettings.user.authCode=e),type:"password","show-password":"",onInput:l.handleUserPassInput,autocomplete:"new-password",placeholder:o.authSettings.user._hasPassword?e.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearUserPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.user._hasPassword?((0,i.uX)(),(0,i.Wv)(c,{key:0,modelValue:o.clearUserPassword,"onUpdate:modelValue":t[1]||(t[1]=e=>o.clearUserPassword=e),onChange:l.handleClearUserPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showUserPassConfirm?((0,i.uX)(),(0,i.Wv)(d,{label:e.$t("sysSecurity.confirmPassword"),prop:"confirmNewUserPassword",key:"user-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.user.confirmNewUserPassword,"onUpdate:modelValue":t[2]||(t[2]=e=>o.authSettings.user.confirmNewUserPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Gp,(0,n.v_)(e.$t("sysSecurity.adminAuth")),1),(0,i.bF)(h,{model:o.authSettings.admin,rules:l.adminPassRules,ref:"adminPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.adminUsername"),prop:"adminUsername"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminUsername,"onUpdate:modelValue":t[3]||(t[3]=e=>o.authSettings.admin.adminUsername=e),autocomplete:"new-password",disabled:o.clearAdminPassword},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.adminPassword"),prop:"adminPassword"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Jp,[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminPassword,"onUpdate:modelValue":t[4]||(t[4]=e=>o.authSettings.admin.adminPassword=e),type:"password","show-password":"",onInput:l.handleAdminPassInput,autocomplete:"new-password",placeholder:o.authSettings.admin._hasPassword?e.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearAdminPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.admin._hasPassword?((0,i.uX)(),(0,i.Wv)(c,{key:0,modelValue:o.clearAdminPassword,"onUpdate:modelValue":t[5]||(t[5]=e=>o.clearAdminPassword=e),onChange:l.handleClearAdminPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showAdminPassConfirm?((0,i.uX)(),(0,i.Wv)(d,{label:e.$t("sysSecurity.confirmPassword"),prop:"confirmNewAdminPassword",key:"admin-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.confirmNewAdminPassword,"onUpdate:modelValue":t[6]||(t[6]=e=>o.authSettings.admin.confirmNewAdminPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Zp,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.apiTokenManagement"))+" ",1),(0,i.Lk)("a",eg,[(0,i.bF)(p,{type:"primary",size:"small",onClick:t[7]||(t[7]=e=>o.showCreateTokenDialog=!0),circle:""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"})]),_:1})])]),(0,i.Lk)("div",tg,[(0,i.bo)(((0,i.uX)(),(0,i.Wv)(b,{data:o.apiTokens,class:"token-table"},{default:(0,i.k6)(()=>[(0,i.bF)(f,{prop:"name",label:e.$t("sysSecurity.tokenName"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",sg,(0,n.v_)(e.row.name),1)]),_:1},8,["label"]),(0,i.bF)(f,{prop:"token",label:e.$t("sysSecurity.tokenValue"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",ig,[(0,i.Lk)("span",ng,(0,n.v_)(e.row.token),1)])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"permissions",label:e.$t("sysSecurity.permissions"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",ag,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.row.permissions,e=>((0,i.uX)(),(0,i.Wv)(m,{key:e,size:"small",class:"permission-tag"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getPermissionText(e)),1)]),_:2},1024))),128))])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"createdAt",label:e.$t("sysSecurity.createdAt"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",og,(0,n.v_)(l.formatDate(e.row.createdAt)),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.status"),"header-align":"center",width:"90"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",lg,[(0,i.bF)(m,{type:"active"===l.getTokenStatus(e.row.expiresAt).status?"success":"danger",size:"small"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getTokenStatus(e.row.expiresAt).label),1)]),_:2},1032,["type"])])]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.expiresAt"),"header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",rg,(0,n.v_)(l.getTokenStatus(e.row.expiresAt).expiresText),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:e.$t("sysSecurity.operation"),fixed:"right","header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",cg,[(0,i.bF)(p,{class:"action-button",size:"small",onClick:e=>l.editToken(t.row)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(p,{class:"action-button",size:"small",type:"danger",onClick:e=>l.deleteToken(t.row.id)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.deleteBtn")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])),[[P,o.tokenLoading]])])]),(0,i.Lk)("div",dg,[(0,i.Lk)("h3",hg,(0,n.v_)(e.$t("sysSecurity.uploadManagement")),1),(0,i.Lk)("h4",ug,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.imageReview"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.imageReviewTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.moderate,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.enableReview")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.moderate.enabled,"onUpdate:modelValue":t[8]||(t[8]=e=>o.uploadSettings.moderate.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.reviewChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.uploadSettings.moderate.channel,"onUpdate:modelValue":t[9]||(t[9]=e=>o.uploadSettings.moderate.channel=e),placeholder:e.$t("sysSecurity.reviewChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{label:"moderatecontent.com",value:"moderatecontent.com"}),(0,i.bF)(k,{label:"nsfwjs",value:"nsfwjs"})]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"moderatecontent.com"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.apiKey")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.moderateContentApiKey,"onUpdate:modelValue":t[10]||(t[10]=e=>o.uploadSettings.moderate.moderateContentApiKey=e)},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0),"nsfwjs"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.nsfwApiPath,"onUpdate:modelValue":t[11]||(t[11]=e=>o.uploadSettings.moderate.nsfwApiPath=e),placeholder:"https://nsfwjs.your.domain"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"]),(0,i.Lk)("h4",pg,[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.ipQuery"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.ipQueryTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.ipQuery,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.enableIpQuery")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.ipQuery.enabled,"onUpdate:modelValue":t[12]||(t[12]=e=>o.uploadSettings.ipQuery.enabled=e)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.ipQueryChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.uploadSettings.ipQuery.channel,"onUpdate:modelValue":t[13]||(t[13]=e=>o.uploadSettings.ipQuery.channel=e),placeholder:e.$t("sysSecurity.ipQueryChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{label:e.$t("sysSecurity.customApi"),value:"customApi"},null,8,["label"])]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"customApi"===o.uploadSettings.ipQuery.channel?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(d,{label:e.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.url,"onUpdate:modelValue":t[14]||(t[14]=e=>o.uploadSettings.ipQuery.customApi.url=e),placeholder:"https://api.example.com/ip"},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.queryParams")},{default:(0,i.k6)(()=>[(0,i.Lk)("div",gg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.params,(t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"query-param-row"},[(0,i.bF)(r,{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:e.$t("sysSecurity.paramNamePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(r,{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:e.$t("sysSecurity.paramValuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:e=>l.removeIpQueryParam(s),disabled:o.uploadSettings.ipQuery.customApi.params.length<=1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick","disabled"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryParam},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysSecurity.addQueryParam")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"]),(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.responseFields"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.responseFieldsTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",fg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.responseFields,(t,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"response-field-row"},[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.responseFields[s],"onUpdate:modelValue":e=>o.uploadSettings.ipQuery.customApi.responseFields[s]=e,placeholder:e.$t("sysSecurity.responseFieldPathPlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{plain:"",circle:"",onClick:e=>l.moveIpQueryResponseField(s,-1),disabled:0===s},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-up"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{plain:"",circle:"",onClick:e=>l.moveIpQueryResponseField(s,1),disabled:s===o.uploadSettings.ipQuery.customApi.responseFields.length-1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-down"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:e=>l.removeIpQueryResponseField(s)},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryResponseField},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysSecurity.addResponseField")),1)]),_:1},8,["onClick"])])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.Lk)("div",mg,[(0,i.Lk)("h3",bg,(0,n.v_)(e.$t("sysSecurity.accessManagement")),1),(0,i.Lk)("h4",yg,(0,n.v_)(e.$t("sysSecurity.domainFilter")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.allowedDomains"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.allowedDomainsTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.accessSettings.allowedDomains,"onUpdate:modelValue":t[15]||(t[15]=e=>o.accessSettings.allowedDomains=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h4",xg,(0,n.v_)(e.$t("sysSecurity.whiteListMode")),1),(0,i.bF)(h,{model:o.accessSettings,rules:l.accessRules,ref:"accessForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.enableWhiteList"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.enableWhiteListTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.whiteListMode,"onUpdate:modelValue":t[16]||(t[16]=e=>o.accessSettings.whiteListMode=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",vg,(0,n.v_)(e.$t("sysSecurity.imageTransform")),1),(0,i.bF)(h,{model:o.accessSettings,rules:l.accessRules,ref:"imageTransformForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.enableImageTransform"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.enableImageTransformTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.imageTransformEnabled,"onUpdate:modelValue":t[17]||(t[17]=e=>o.accessSettings.imageTransformEnabled=e)},null,8,["modelValue"])]),_:1}),o.accessSettings.imageTransformEnabled?((0,i.uX)(),(0,i.Wv)(d,{key:0,prop:"imageTransformAllowedSizes"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.imageTransformAllowedSizes"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.imageTransformAllowedSizesHint"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.accessSettings.imageTransformAllowedSizes,"onUpdate:modelValue":t[18]||(t[18]=e=>o.accessSettings.imageTransformAllowedSizes=e),placeholder:e.$t("sysSecurity.imageTransformAllowedSizesPlaceholder")},null,8,["modelValue","placeholder"])]),_:1})):(0,i.Q3)("",!0)]),_:1},8,["model","rules"]),(0,i.Lk)("h4",kg,(0,n.v_)(e.$t("sysSecurity.sessionSecurityPolicy")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.secureMode"))+" ",1),(0,i.bF)(y,{content:e.$t("sysSecurity.secureModeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.sessionSecure,"onUpdate:modelValue":t[19]||(t[19]=e=>o.accessSettings.sessionSecure=e)},null,8,["modelValue"])]),_:1}),(0,i.bF)(d,{label:e.$t("sysSecurity.userSessionMaxAge"),prop:"userSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.userSessionMaxAge,"onUpdate:modelValue":t[20]||(t[20]=e=>o.accessSettings.userSessionMaxAge=e),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",_g,(0,n.v_)(e.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.adminSessionMaxAge"),prop:"adminSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.adminSessionMaxAge,"onUpdate:modelValue":t[21]||(t[21]=e=>o.accessSettings.adminSessionMaxAge=e),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",wg,(0,n.v_)(e.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"])]),_:1},8,["model"])]),(0,i.bF)(F,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"]),(0,i.bF)(M,{modelValue:o.showCreateTokenDialog,"onUpdate:modelValue":t[29]||(t[29]=e=>o.showCreateTokenDialog=e),title:e.$t("sysSecurity.createTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Sg,[(0,i.bF)(p,{onClick:t[28]||(t[28]=e=>o.showCreateTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.createToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.createBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.newToken,rules:l.tokenRules,ref:"tokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel"),prop:"name"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.newToken.name,"onUpdate:modelValue":t[22]||(t[22]=e=>o.newToken.name=e),placeholder:e.$t("sysSecurity.tokenNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.newToken.permissions,"onUpdate:modelValue":t[23]||(t[23]=e=>o.newToken.permissions=e)},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(c,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(c,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(c,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.neverExpire,"onUpdate:modelValue":t[24]||(t[24]=e=>o.newToken.neverExpire=e),onChange:l.onCreateNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Cg,[(0,i.bF)(S,{modelValue:o.newToken.expirationValue,"onUpdate:modelValue":t[25]||(t[25]=e=>o.newToken.expirationValue=e),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(_,{modelValue:o.newToken.expirationUnit,"onUpdate:modelValue":t[26]||(t[26]=e=>o.newToken.expirationUnit=e),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,t=>((0,i.uX)(),(0,i.Wv)(k,{key:t.value,label:e.$t(t.labelKey),value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.autoDelete,"onUpdate:modelValue":t[27]||(t[27]=e=>o.newToken.autoDelete=e)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(M,{modelValue:o.showEditTokenDialog,"onUpdate:modelValue":t[37]||(t[37]=e=>o.showEditTokenDialog=e),title:e.$t("sysSecurity.editTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Tg,[(0,i.bF)(p,{onClick:t[36]||(t[36]=e=>o.showEditTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.updateToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.updateBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.editingToken,rules:l.editTokenRules,ref:"editTokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.editingToken.name,"onUpdate:modelValue":t[30]||(t[30]=e=>o.editingToken.name=e),disabled:""},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.editingToken.permissions,"onUpdate:modelValue":t[31]||(t[31]=e=>o.editingToken.permissions=e)},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(c,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(c,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(c,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.neverExpire,"onUpdate:modelValue":t[32]||(t[32]=e=>o.editingToken.neverExpire=e),onChange:l.onEditNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:0,label:e.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Fg,[(0,i.bF)(S,{modelValue:o.editingToken.expirationValue,"onUpdate:modelValue":t[33]||(t[33]=e=>o.editingToken.expirationValue=e),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(_,{modelValue:o.editingToken.expirationUnit,"onUpdate:modelValue":t[34]||(t[34]=e=>o.editingToken.expirationUnit=e),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,t=>((0,i.uX)(),(0,i.Wv)(k,{key:t.value,label:e.$t(t.labelKey),value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(d,{key:1,label:e.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.autoDelete,"onUpdate:modelValue":t[35]||(t[35]=e=>o.editingToken.autoDelete=e)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(M,{modelValue:o.showTokenResultDialog,"onUpdate:modelValue":t[40]||(t[40]=e=>o.showTokenResultDialog=e),title:e.$t("sysSecurity.tokenCreatedTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Dg,[(0,i.bF)(p,{type:"primary",onClick:t[39]||(t[39]=e=>o.showTokenResultDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.savedBtn")),1)]),_:1})])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",Mg,[(0,i.Lk)("p",Pg,[(0,i.bF)(u,{icon:"exclamation-triangle",style:{"margin-right":"5px"}}),(0,i.eW)(" "+(0,n.v_)(e.$t("sysSecurity.tokenCreatedWarning")),1)]),(0,i.bF)(h,{"label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:e.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(o.createdToken.name),1)]),_:1},8,["label"]),(0,i.bF)(d,{label:e.$t("sysSecurity.fullToken")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.createdToken.token,"onUpdate:modelValue":t[38]||(t[38]=e=>o.createdToken.token=e),readonly:""},{append:(0,i.k6)(()=>[(0,i.bF)(p,{onClick:l.copyToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysSecurity.copyBtn")),1)]),_:1},8,["onClick"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])]),_:1},8,["modelValue","title","width"])])),[[P,o.loading]])}s(81148);const $g={s:1e3,m:6e4,h:36e5,d:864e5};function Lg(e,t,s){if(!Number.isFinite(t)||t<=0)throw new Error("有效期数值必须大于 0");const i="string"===typeof e?new Date(e):new Date(e.getTime());if($g[s])return new Date(i.getTime()+t*$g[s]).toISOString();if("M"===s)return i.setUTCMonth(i.getUTCMonth()+t),i.toISOString();if("Y"===s)return i.setUTCFullYear(i.getUTCFullYear()+t),i.toISOString();throw new Error(`无效的时间单位: ${s}`)}function Vg(e){const t=new Date(e),s=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0"),a=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),l=String(t.getSeconds()).padStart(2,"0");return`${s}-${i}-${n} ${a}:${o}:${l}`}function Eg(e,t=new Date){if(null===e||void 0===e)return{status:"active",label:"有效",expiresText:"永不过期"};const s=new Date(e),i=t instanceof Date?t:new Date(t),n=Vg(e);return i.getTime()>s.getTime()?{status:"expired",label:"已过期",expiresText:n}:{status:"active",label:"有效",expiresText:n}}var Ig={components:{FloatingSaveButton:jp},data(){return{authSettings:{user:{},admin:{}},uploadSettings:{moderate:{},ipQuery:{enabled:!1,channel:"customApi",customApi:{url:"",params:[{key:"ip",value:"{ip}"}],responseFields:[]}}},accessSettings:{},apiTokens:[],loading:!0,tokenLoading:!1,oriUserPassword:"",oriAdminPassword:"",showUserPassConfirm:!1,showAdminPassConfirm:!1,clearUserPassword:!1,clearAdminPassword:!1,showCreateTokenDialog:!1,showEditTokenDialog:!1,showTokenResultDialog:!1,timeUnitOptions:[{labelKey:"sysSecurity.timeUnitSeconds",value:"s"},{labelKey:"sysSecurity.timeUnitMinutes",value:"m"},{labelKey:"sysSecurity.timeUnitHours",value:"h"},{labelKey:"sysSecurity.timeUnitDays",value:"d"},{labelKey:"sysSecurity.timeUnitMonths",value:"M"},{labelKey:"sysSecurity.timeUnitYears",value:"Y"}],newToken:{name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},editingToken:{id:"",name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},createdToken:{name:"",token:""}}},computed:{dialogWidth(){return window.innerWidth>768?"50%":"90%"},userPassRules(){return{authCode:[{validator:(e,t,s)=>{const i=["%","&","?","#","/"],n=i.some(e=>t&&t.includes(e));n?s(new Error(this.$t("sysSecurity.passwordUrlReserved"))):s()},trigger:"blur"}],confirmNewUserPassword:[{validator:(e,t,s)=>{t?t!==this.authSettings.user.authCode?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmUploadPassword")))},trigger:"blur"}]}},adminPassRules(){return{confirmNewAdminPassword:[{validator:(e,t,s)=>{t?t!==this.authSettings.admin.adminPassword?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmAdminPassword")))},trigger:"blur"}]}},accessRules(){const e=(e,t,s)=>{!Number.isInteger(t)||t<1||t>3650?s(new Error(this.$t("sysSecurity.sessionMaxAgeInvalid"))):s()},t=(e,t,s)=>{if(!this.accessSettings.imageTransformEnabled||!t||!t.trim())return void s();const i=t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean),n=i.every(e=>{const t=e.match(/^(auto|[1-9]\d*)x(auto|[1-9]\d*)$/);return!(!t||"auto"===t[1]&&"auto"===t[2])&&t.slice(1).every(e=>"auto"===e||Number(e)<=4096)});n?s():s(new Error(this.$t("sysSecurity.imageTransformAllowedSizesInvalid")))};return{userSessionMaxAge:[{validator:e,trigger:"change"}],adminSessionMaxAge:[{validator:e,trigger:"change"}],imageTransformAllowedSizes:[{validator:t,trigger:["blur","change"]}]}},tokenRules(){return{name:[{required:!0,message:this.$t("sysSecurity.tokenNameRequired"),trigger:"blur"}],permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(e,t,s)=>{this.newToken.neverExpire||t&&!(t<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}},editTokenRules(){return{permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(e,t,s)=>{this.editingToken.neverExpire||t&&!(t<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}}},methods:{normalizeIpQuerySettings(e={}){const t=e.ipQuery||{},s=t.customApi||{},i=Array.isArray(s.params)&&s.params.length>0?s.params.map(e=>({key:e?.key||"",value:e?.value||""})):[{key:"ip",value:"{ip}"}],n=Array.isArray(s.responseFields)?s.responseFields.map(e=>"string"===typeof e?e:e?.path||""):[];return{...e,moderate:e.moderate||{},ipQuery:{enabled:t.enabled??!1,channel:t.channel||"customApi",customApi:{url:s.url||"",params:i,responseFields:n}}}},addIpQueryParam(){this.uploadSettings.ipQuery.customApi.params.push({key:"",value:""})},removeIpQueryParam(e){this.uploadSettings.ipQuery.customApi.params.length<=1||this.uploadSettings.ipQuery.customApi.params.splice(e,1)},addIpQueryResponseField(){this.uploadSettings.ipQuery.customApi.responseFields.push("")},removeIpQueryResponseField(e){this.uploadSettings.ipQuery.customApi.responseFields.splice(e,1)},moveIpQueryResponseField(e,t){const s=this.uploadSettings.ipQuery.customApi.responseFields,i=e+t;if(i<0||i>=s.length)return;const[n]=s.splice(e,1);s.splice(i,0,n)},handleUserPassInput(){this.authSettings.user.authCode!==this.oriUserPassword?this.showUserPassConfirm=!0:this.showUserPassConfirm=!1},handleAdminPassInput(){this.authSettings.admin.adminPassword!==this.oriAdminPassword?this.showAdminPassConfirm=!0:this.showAdminPassConfirm=!1},handleClearUserPassword(e){e&&(this.authSettings.user.authCode="",this.showUserPassConfirm=!1)},handleClearAdminPassword(e){e&&(this.authSettings.admin.adminPassword="",this.authSettings.admin.adminUsername="",this.showAdminPassConfirm=!1)},getPermissionText(e){const t={upload:this.$t("sysSecurity.permUpload"),delete:this.$t("sysSecurity.permDelete"),list:this.$t("sysSecurity.permList"),manage:this.$t("sysSecurity.permManage")};return t[e]||e},formatDate(e){return new Date(e).toLocaleString("zh-CN")},async loadApiTokens(){this.tokenLoading=!0;try{const e=await(0,Rt.A)("/api/manage/apiTokens"),t=await e.json();this.apiTokens=t.tokens||[]}catch(e){this.$message.error(this.$t("sysSecurity.tokenListFailed"))}finally{this.tokenLoading=!1}},createToken(){this.$refs.tokenForm.validate(async e=>{if(e)try{this.newToken.owner="admin";let e=null,t=!1;this.newToken.neverExpire||(e=Lg(new Date,this.newToken.expirationValue,this.newToken.expirationUnit),t=this.newToken.autoDelete);const s=await(0,Rt.A)("/api/manage/apiTokens",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:this.newToken.name,owner:this.newToken.owner,permissions:this.newToken.permissions,expiresAt:e,autoDelete:t})}),i=await s.json();s.ok?(this.createdToken={name:i.name,token:i.token},this.showCreateTokenDialog=!1,this.showTokenResultDialog=!0,this.newToken={name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenCreateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenCreateFailed"))}catch(t){this.$message.error(this.$t("sysSecurity.tokenCreateFailed"))}})},editToken(e){const t=null!==e.expiresAt&&void 0!==e.expiresAt;this.editingToken={id:e.id,name:e.name,owner:e.owner,permissions:[...e.permissions],neverExpire:!t,expirationValue:1,expirationUnit:"d",autoDelete:e.autoDelete||!1},this.showEditTokenDialog=!0},updateToken(){this.$refs.editTokenForm.validate(async e=>{if(e)try{let e=null,t=!1;this.editingToken.neverExpire||(e=Lg(new Date,this.editingToken.expirationValue,this.editingToken.expirationUnit),t=this.editingToken.autoDelete);const s=await(0,Rt.A)("/api/manage/apiTokens",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenId:this.editingToken.id,permissions:this.editingToken.permissions,expiresAt:e,autoDelete:t})}),i=await s.json();s.ok?(this.showEditTokenDialog=!1,await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenUpdateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenUpdateFailed"))}catch(t){this.$message.error(this.$t("sysSecurity.tokenUpdateFailed"))}})},async deleteToken(e){try{await this.$confirm(this.$t("sysSecurity.tokenDeleteConfirm"),this.$t("sysSecurity.tokenDeleteConfirmTitle"),{confirmButtonText:this.$t("sysSecurity.tokenDeleteConfirmOk"),cancelButtonText:this.$t("sysSecurity.tokenDeleteConfirmCancel"),type:"warning"});const t=await(0,Rt.A)(`/api/manage/apiTokens?id=${e}`,{method:"DELETE"}),s=await t.json();t.ok?(await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenDeleteSuccess"))):this.$message.error(s.error||this.$t("sysSecurity.tokenDeleteFailed"))}catch(t){"cancel"!==t&&this.$message.error(this.$t("sysSecurity.tokenDeleteFailed"))}},async copyToken(){try{await navigator.clipboard.writeText(this.createdToken.token),this.$message.success(this.$t("sysSecurity.tokenCopied"))}catch(e){this.$message.error(this.$t("sysSecurity.copyFailed"))}},onCreateNeverExpireChange(e){e&&(this.newToken.autoDelete=!1)},onEditNeverExpireChange(e){e&&(this.editingToken.autoDelete=!1)},getTokenStatus(e){return Eg(e)},saveSettings(){let e=[];e.push(new Promise(e=>{this.$refs.userPassForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.adminPassForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.accessForm.validate(t=>{e(t)})})),e.push(new Promise(e=>{this.$refs.imageTransformForm.validate(t=>{e(t)})})),Promise.all(e).then(e=>{const t=e.every(e=>e);if(!t)return;if(this.accessSettings.userSessionMaxAge<1||!Number.isInteger(this.accessSettings.userSessionMaxAge)||this.accessSettings.userSessionMaxAge>3650||this.accessSettings.adminSessionMaxAge<1||!Number.isInteger(this.accessSettings.adminSessionMaxAge)||this.accessSettings.adminSessionMaxAge>3650)return void this.$message.error(this.$t("sysSecurity.sessionMaxAgeInvalid"));const s={auth:this.authSettings,upload:this.uploadSettings,access:this.accessSettings};delete s.auth.user.confirmNewUserPassword,delete s.auth.admin.confirmNewAdminPassword,this.clearUserPassword&&(s.auth.user._clear=!0,s.auth.user.authCode=""),this.clearAdminPassword&&(s.auth.admin._clear=!0,s.auth.admin.adminPassword=""),(0,Rt.A)("/api/manage/sysConfig/security",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}).then(e=>e.json()).then(e=>{if(e.adminPasswordChanged){const e=this.$t("sysSecurity.adminPasswordChangedRelogin");return this.$message.warning(e),void setTimeout(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")},1500)}this.$message.success(this.$t("sysSecurity.settingsSaved")),this.authSettings.user.authCode="",this.authSettings.admin.adminPassword="",this.oriUserPassword="",this.oriAdminPassword="",s.auth.user.authCode&&!s.auth.user._clear?this.authSettings.user._hasPassword=!0:s.auth.user._clear&&(this.authSettings.user._hasPassword=!1),s.auth.admin.adminPassword&&!s.auth.admin._clear?this.authSettings.admin._hasPassword=!0:s.auth.admin._clear&&(this.authSettings.admin._hasPassword=!1),this.showUserPassConfirm=!1,this.showAdminPassConfirm=!1,this.clearUserPassword=!1,this.clearAdminPassword=!1}).catch(()=>{})})}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/security").then(e=>e.json()).then(e=>{this.authSettings=e.auth,this.uploadSettings=this.normalizeIpQuerySettings(e.upload),this.accessSettings={imageTransformEnabled:!1,imageTransformAllowedSizes:"",...e.access},this.oriUserPassword="",this.oriAdminPassword="",this.authSettings.user.confirmNewUserPassword="",this.authSettings.admin.confirmNewAdminPassword="",this.loadApiTokens()}).finally(()=>{this.loading=!1})}};const Ug=(0,d.A)(Ig,[["render",Ag],["__scopeId","data-v-264510a6"]]);var Og=Ug;const Rg={class:"page-settings"},Wg={class:"first-title"},Bg={key:5,class:"announcement-refresh-option"};function zg(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Eu.P9,h=Eu.AV,u=Iu.qi,p=Vu.WK,f=Rp.dI,m=$u.xE,b=$u.US,y=jp,x=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Rg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.groupedSettings,(s,a)=>((0,i.uX)(),(0,i.CE)("div",{key:a,class:"first-settings"},[(0,i.Lk)("h3",Wg,(0,n.v_)(a),1),(0,i.bF)(b,{model:o.settings,"label-width":"150px"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s,(s,a)=>((0,i.uX)(),(0,i.Wv)(m,{key:s.id,class:(0,n.C4)({"announcement-manual-height":"announcement"===s.id&&null!==o.announcementManualHeight}),style:(0,n.Tr)("announcement"===s.id&&null!==o.announcementManualHeight?{"--announcement-manual-height":`${o.announcementManualHeight}px`}:void 0)},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.localized(s,"label"))+" ",1),s.tooltip?((0,i.uX)(),(0,i.Wv)(c,{key:0,content:l.localized(s,"tooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>["select"===s.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed,placeholder:l.localized(s,"placeholder"),style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s.options,e=>((0,i.uX)(),(0,i.Wv)(d,{key:e.value,label:l.localizedOption(e),value:e.value},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"channelName"===s.type?((0,i.uX)(),(0,i.Wv)(h,{key:1,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:!l.currentUploadChannel||0===l.currentChannelList.length,placeholder:e.$t("sysPage.channelSelectPlaceholder"),clearable:"",style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(d,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"boolean"===s.type?((0,i.uX)(),(0,i.Wv)(u,{key:2,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])):"textarea"===s.type?((0,i.uX)(),(0,i.Wv)(p,{key:3,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,type:"textarea",autosize:{minRows:2,maxRows:"announcement"===s.id?8:void 0},resize:"vertical",disabled:s.fixed,placeholder:l.localized(s,"placeholder"),onMousedown:e=>l.handleAnnouncementResizeStart(e,s)},null,8,["modelValue","onUpdate:modelValue","autosize","disabled","placeholder","onMousedown"])):((0,i.uX)(),(0,i.Wv)(p,{key:4,modelValue:s.value,"onUpdate:modelValue":e=>s.value=e,disabled:s.fixed,placeholder:l.localized(s,"placeholder")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])),"announcement"===s.id?((0,i.uX)(),(0,i.CE)("div",Bg,[(0,i.bF)(f,{modelValue:o.refreshAnnouncement,"onUpdate:modelValue":t[0]||(t[0]=e=>o.refreshAnnouncement=e)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(e.$t("sysPage.refreshAnnouncement")),1)]),_:1},8,["modelValue"])])):(0,i.Q3)("",!0)]),_:2},1032,["class","style"]))),128))]),_:2},1032,["model"])]))),128)),(0,i.bF)(y,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[x,o.loading]])}var Ng=s(457),jg={components:{FloatingSaveButton:jp},data(){return{settings:{config:[]},loading:!0,refreshAnnouncement:!1,announcementManualHeight:null,announcementResizeMouseUpHandler:null,availableChannels:{}}},computed:{isEn(){return"en"===this.$i18n.locale},groupedSettings(){const e={};return this.settings.config&&this.settings.config.forEach(t=>{const s=this.isEn?t.category_en||t.category||this.$t("sysPage.otherSettings"):t.category||this.$t("sysPage.otherSettings");e[s]||(e[s]=[]),e[s].push(t)}),e},currentUploadChannel(){const e=this.settings.config?.find(e=>"defaultUploadChannel"===e.id);return e?.value||""},currentChannelList(){return this.availableChannels[this.currentUploadChannel]||[]}},watch:{currentUploadChannel(e,t){if(e!==t){const t=this.settings.config?.find(e=>"defaultChannelName"===e.id);if(t){const s=this.availableChannels[e]||[];s.some(e=>e.name===t.value)||(t.value="")}}}},methods:{localized(e,t){return this.isEn&&e[t+"_en"]?e[t+"_en"]:e[t]||""},localizedOption(e){return this.isEn&&e.label_en?e.label_en:e.label},handleAnnouncementResizeStart(e,t){if("announcement"!==t.id)return;const s=e.target.closest?.("textarea");if(!s)return;const i=s.getBoundingClientRect(),n=24,a=e.clientX>=i.right-n&&e.clientY>=i.bottom-n;if(!a)return;const o=s.closest(".el-form-item");this.announcementResizeMouseUpHandler&&window.removeEventListener("mouseup",this.announcementResizeMouseUpHandler);const l=s.offsetHeight;s.style.height=`${l}px`,o?.classList.remove("announcement-manual-height"),this.announcementResizeMouseUpHandler=()=>{const e=s.offsetHeight,t=Math.abs(e-l)>1?e:this.announcementManualHeight;null!==t&&(this.announcementManualHeight=t,o?.style.setProperty("--announcement-manual-height",`${t}px`),o?.classList.add("announcement-manual-height")),this.announcementResizeMouseUpHandler=null},window.addEventListener("mouseup",this.announcementResizeMouseUpHandler,{once:!0})},saveSettings(){(0,Rt.A)("/api/manage/sysConfig/page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...this.settings,refreshAnnouncement:this.refreshAnnouncement})}).then(()=>{this.refreshAnnouncement=!1,this.$message.success(this.$t("sysPage.settingsSaved"))})},async fetchAvailableChannels(){try{const e=await Ng.A.get("/api/channels");e.data&&(this.availableChannels=e.data)}catch(e){console.error("Failed to fetch available channels:",e)}}},beforeUnmount(){this.announcementResizeMouseUpHandler&&window.removeEventListener("mouseup",this.announcementResizeMouseUpHandler)},mounted(){this.loading=!0,this.fetchAvailableChannels(),(0,Rt.A)("/api/manage/sysConfig/page").then(e=>e.json()).then(e=>{this.settings=e,this.settings.config&&this.settings.config.forEach(e=>{void 0!==e.value&&null!==e.value&&""!==e.value||void 0===e.default||(e.value=e.default),"boolean"===e.type&&"string"===typeof e.value&&(e.value="true"===e.value)})}).finally(()=>{this.loading=!1})}};const Hg=(0,d.A)(jg,[["render",zg],["__scopeId","data-v-342e4dda"]]);var qg=Hg;const Xg={class:"others-settings"},Kg={class:"first-settings"},Qg={class:"first-title"},Yg={class:"first-title"},Gg={class:"first-title"},Jg={class:"first-title"},Zg=["innerHTML"],ef={class:"first-title"};function tf(e,t,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),c=g.R7,d=Iu.qi,h=$u.xE,u=$u.US,p=Vu.WK,f=Eu.P9,m=Eu.AV,b=jp,y=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Xg,[(0,i.Lk)("div",Kg,[(0,i.Lk)("h3",Qg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.remoteTelemetry"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.remoteTelemetryTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.telemetry,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.telemetry.enabled,"onUpdate:modelValue":t[0]||(t[0]=e=>o.settings.telemetry.enabled=e),disabled:o.settings.telemetry.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"])]),_:1},8,["model"]),(0,i.Lk)("h3",Yg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.cloudflareApiToken"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.cloudflareApiTokenTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.cloudflareApiToken,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.zoneId")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_ZONE_ID,"onUpdate:modelValue":t[1]||(t[1]=e=>o.settings.cloudflareApiToken.CF_ZONE_ID=e),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.accountEmail")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_EMAIL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.settings.cloudflareApiToken.CF_EMAIL=e),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:"API Key"},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_API_KEY,"onUpdate:modelValue":t[3]||(t[3]=e=>o.settings.cloudflareApiToken.CF_API_KEY=e),disabled:o.settings.cloudflareApiToken.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Gg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.randomImageApi"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.randomImageApiTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.randomImageAPI,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.randomImageAPI.enabled,"onUpdate:modelValue":t[4]||(t[4]=e=>o.settings.randomImageAPI.enabled=e),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"randomImageAPI.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysOthers.directory")),1),(0,i.bF)(c,{content:e.$t("sysOthers.directoryTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.randomImageAPI.allowedDir,"onUpdate:modelValue":t[5]||(t[5]=e=>o.settings.randomImageAPI.allowedDir=e),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Jg,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.publicBrowse"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.publicBrowseTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.publicBrowse,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.publicBrowse.enabled,"onUpdate:modelValue":t[6]||(t[6]=e=>o.settings.publicBrowse.enabled=e),disabled:o.settings.publicBrowse.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"publicBrowse.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(e.$t("sysOthers.openDirectory")),1),(0,i.bF)(c,{placement:"right","raw-content":""},{content:(0,i.k6)(()=>[(0,i.Lk)("div",{style:{"max-width":"320px","line-height":"1.6"},innerHTML:e.$t("sysOthers.openDirectoryTooltip")},null,8,Zg)]),default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.publicBrowse.allowedDir,"onUpdate:modelValue":t[7]||(t[7]=e=>o.settings.publicBrowse.allowedDir=e),disabled:o.settings.publicBrowse.fixed,placeholder:"wallpaper,photos,album"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",ef,[(0,i.eW)((0,n.v_)(e.$t("sysOthers.webdav"))+" ",1),(0,i.bF)(c,{content:e.$t("sysOthers.webdavTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.webDAV,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:e.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(d,{modelValue:o.settings.webDAV.enabled,"onUpdate:modelValue":t[8]||(t[8]=e=>o.settings.webDAV.enabled=e),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.username,"onUpdate:modelValue":t[9]||(t[9]=e=>o.settings.webDAV.username=e),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.password,"onUpdate:modelValue":t[10]||(t[10]=e=>o.settings.webDAV.password=e),disabled:o.settings.webDAV.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:e.$t("sysOthers.webdavUploadChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.uploadChannel,"onUpdate:modelValue":t[11]||(t[11]=e=>o.settings.webDAV.uploadChannel=e),disabled:o.settings.webDAV.fixed,placeholder:e.$t("sysOthers.webdavDefaultChannel"),clearable:""},{default:(0,i.k6)(()=>[(0,i.bF)(f,{label:"Telegram",value:"telegram"}),(0,i.bF)(f,{label:"Cloudflare R2",value:"cfr2"}),(0,i.bF)(f,{label:"S3",value:"s3"}),(0,i.bF)(f,{label:"Discord",value:"discord"}),(0,i.bF)(f,{label:"HuggingFace",value:"huggingface"}),(0,i.bF)(f,{label:"WebDAV",value:"webdav"})]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"]),o.settings.webDAV.uploadChannel&&l.webdavChannelList.length>1?((0,i.uX)(),(0,i.Wv)(h,{key:0,label:e.$t("sysOthers.webdavChannelName")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.channelName,"onUpdate:modelValue":t[12]||(t[12]=e=>o.settings.webDAV.channelName=e),disabled:o.settings.webDAV.fixed,placeholder:e.$t("uploadSettings.autoSelect"),clearable:""},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.webdavChannelList,e=>((0,i.uX)(),(0,i.Wv)(f,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.bF)(b,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[y,o.loading]])}var sf={components:{FloatingSaveButton:jp},data(){return{settings:{telemetry:{},randomImageAPI:{},cloudflareApiToken:{},webDAV:{},publicBrowse:{}},availableChannels:{},loading:!0}},computed:{webdavChannelList(){const e=this.settings.webDAV?.uploadChannel;return e&&this.availableChannels[e]||[]}},watch:{"settings.webDAV.uploadChannel"(){this.settings.webDAV&&(this.settings.webDAV.channelName="")}},methods:{saveSettings(){(0,Rt.A)("/api/manage/sysConfig/others",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success(this.$t("sysOthers.settingsSaved")))},async fetchAvailableChannels(){try{const e=await(0,Rt.A)("/api/channels");e.ok&&(this.availableChannels=await e.json())}catch(e){console.error("Failed to fetch available channels:",e)}}},mounted(){this.loading=!0,(0,Rt.A)("/api/manage/sysConfig/others").then(e=>e.json()).then(e=>{this.settings=e}).finally(()=>{this.loading=!1}),this.fetchAvailableChannels()}};const nf=(0,d.A)(sf,[["render",tf],["__scopeId","data-v-69ae97d8"]]);var af=nf,of=s(48903),lf={name:"SystemConfig",mixins:[of.A],data(){return{activeIndex:"status",isSidebarCollapse:!1}},watch:{"$route.hash":{immediate:!0,handler(e){this.activeIndex=e.replace("#",""),window.scrollTo(0,0)}},activeIndex(e){const t=`#${e}`;this.$router.push({hash:t})}},components:{DashboardTabs:f.A,SysConfigTabs:u,SysCogStatus:Du,SysCogUpload:Op,SysCogSecurity:Og,SysCogPage:qg,SysCogOthers:af},computed:{disableTooltip(){return window.innerWidth<768},currentComponent(){const e=this.$route.hash.replace("#","");switch(e){case"status":return Du;case"upload":return Op;case"security":return Og;case"page":return qg;case"others":return af;default:return Du}}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},setDefaultHash(){const e="#status";window.location.hash=e,this.activeIndex=e.replace("#","")}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),window.location.hash||this.setDefaultHash()}};const rf=(0,d.A)(lf,[["render",x],["__scopeId","data-v-7e9e1ae0"]]);var cf=rf},63003:function(e,t,s){s(85331)},64752:function(e,t,s){s(85331),s(38736),s(18785)},70415:function(e,t,s){s(85331),s(73565)},73565:function(e,t,s){s(85331)},91114:function(e,t,s){function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function n(e,t){if("object"!=i(e)||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var n=s.call(e,t||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function a(e){var t=n(e,"string");return"symbol"==i(t)?t:t+""}function o(e,t,s){return(t=a(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}s.d(t,{A:function(){return o}})},97769:function(e,t,s){s.d(t,{A:function(){return h}});var i=s(56768);const n={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},a={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},o={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function l(e,t,s,l,r,c){const d=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("span",(0,i.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${s.type}`]}),["telegram"===s.type?((0,i.uX)(),(0,i.CE)("svg",n,[...t[0]||(t[0]=[(0,i.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===s.type?((0,i.uX)(),(0,i.CE)("svg",a,[...t[1]||(t[1]=[(0,i.Fv)('',9)])])):"webdav"===s.type?((0,i.uX)(),(0,i.CE)("svg",o,[...t[2]||(t[2]=[(0,i.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,i.uX)(),(0,i.Wv)(d,{key:3,icon:c.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},c=s(71241);const d=(0,c.A)(r,[["render",l],["__scopeId","data-v-ce6ff2ce"]]);var h=d},98642:function(e,t,s){s(85331)}}]); +//# sourceMappingURL=757.27c783c1.js.map \ No newline at end of file diff --git a/frontend-dist/js/757.27c783c1.js.gz b/frontend-dist/js/757.27c783c1.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..f436bccb879d2018f8339aa225dd561cdc705216 GIT binary patch literal 108377 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

5H#NcHG@}ZJS)fJFatl%Y*CKu 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/417.f95b3308.js.map b/frontend-dist/js/757.27c783c1.js.map similarity index 99% rename from frontend-dist/js/417.f95b3308.js.map rename to frontend-dist/js/757.27c783c1.js.map index 978559f..13ac04f 100644 --- a/frontend-dist/js/417.f95b3308.js.map +++ b/frontend-dist/js/757.27c783c1.js.map @@ -1 +1 @@ -{"version":3,"file":"js/417.f95b3308.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?996b","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?cf73","webpack://sanyue_imghub/./src/views/SystemConfig.vue?00e2","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?f721","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?7c9a","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?9c77","webpack://sanyue_imghub/./node_modules/@kurkle/color/dist/color.esm.js","webpack://sanyue_imghub/../../src/helpers/helpers.core.ts","webpack://sanyue_imghub/../../src/helpers/helpers.math.ts","webpack://sanyue_imghub/../../src/helpers/helpers.collection.ts","webpack://sanyue_imghub/../../src/helpers/helpers.extras.ts","webpack://sanyue_imghub/../../src/helpers/helpers.easing.ts","webpack://sanyue_imghub/../../src/helpers/helpers.color.ts","webpack://sanyue_imghub/../../src/core/core.animations.defaults.js","webpack://sanyue_imghub/../../src/core/core.layouts.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.intl.ts","webpack://sanyue_imghub/../../src/core/core.ticks.js","webpack://sanyue_imghub/../../src/core/core.scale.defaults.js","webpack://sanyue_imghub/../../src/core/core.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.canvas.ts","webpack://sanyue_imghub/../../src/helpers/helpers.options.ts","webpack://sanyue_imghub/../../src/helpers/helpers.config.ts","webpack://sanyue_imghub/../../src/helpers/helpers.curve.ts","webpack://sanyue_imghub/../../src/helpers/helpers.dom.ts","webpack://sanyue_imghub/../../src/helpers/helpers.interpolation.ts","webpack://sanyue_imghub/../../src/helpers/helpers.rtl.ts","webpack://sanyue_imghub/../../src/helpers/helpers.segment.js","webpack://sanyue_imghub/../../src/helpers/helpers.dataset.ts","webpack://sanyue_imghub/../src/core/core.animator.js","webpack://sanyue_imghub/../src/core/core.animation.js","webpack://sanyue_imghub/../src/core/core.animations.js","webpack://sanyue_imghub/../src/core/core.datasetController.js","webpack://sanyue_imghub/../src/controllers/controller.bar.js","webpack://sanyue_imghub/../src/controllers/controller.bubble.js","webpack://sanyue_imghub/../src/controllers/controller.doughnut.js","webpack://sanyue_imghub/../src/controllers/controller.line.js","webpack://sanyue_imghub/../src/controllers/controller.polarArea.js","webpack://sanyue_imghub/../src/controllers/controller.pie.js","webpack://sanyue_imghub/../src/controllers/controller.radar.js","webpack://sanyue_imghub/../src/controllers/controller.scatter.js","webpack://sanyue_imghub/../src/core/core.adapters.ts","webpack://sanyue_imghub/../src/core/core.interaction.js","webpack://sanyue_imghub/../src/core/core.layouts.js","webpack://sanyue_imghub/../src/platform/platform.base.js","webpack://sanyue_imghub/../src/platform/platform.basic.js","webpack://sanyue_imghub/../src/platform/platform.dom.js","webpack://sanyue_imghub/../src/platform/index.js","webpack://sanyue_imghub/../src/core/core.element.ts","webpack://sanyue_imghub/../src/core/core.scale.autoskip.js","webpack://sanyue_imghub/../src/core/core.scale.js","webpack://sanyue_imghub/../src/core/core.typedRegistry.js","webpack://sanyue_imghub/../src/core/core.registry.js","webpack://sanyue_imghub/../src/core/core.plugins.js","webpack://sanyue_imghub/../src/core/core.config.js","webpack://sanyue_imghub/../src/core/core.controller.js","webpack://sanyue_imghub/../src/elements/element.arc.ts","webpack://sanyue_imghub/../src/elements/element.line.js","webpack://sanyue_imghub/../src/elements/element.point.ts","webpack://sanyue_imghub/../src/elements/element.bar.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.segment.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.helper.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.options.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.stack.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/simpleArc.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.drawing.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/index.js","webpack://sanyue_imghub/../src/plugins/plugin.legend.js","webpack://sanyue_imghub/../src/plugins/plugin.subtitle.js","webpack://sanyue_imghub/../src/plugins/plugin.tooltip.js","webpack://sanyue_imghub/../src/scales/scale.category.js","webpack://sanyue_imghub/../src/scales/scale.linearbase.js","webpack://sanyue_imghub/../src/scales/scale.linear.js","webpack://sanyue_imghub/../src/scales/scale.logarithmic.js","webpack://sanyue_imghub/../src/scales/scale.radialLinear.js","webpack://sanyue_imghub/../src/scales/scale.time.js","webpack://sanyue_imghub/../src/scales/scale.timeseries.js","webpack://sanyue_imghub/../src/props.ts","webpack://sanyue_imghub/../src/utils.ts","webpack://sanyue_imghub/../src/chart.ts","webpack://sanyue_imghub/../src/typedCharts.ts","webpack://sanyue_imghub/./src/utils/batchProcessor.js","webpack://sanyue_imghub/./src/utils/indexRebuilder.js","webpack://sanyue_imghub/./src/utils/backupGenerator.js","webpack://sanyue_imghub/./src/utils/restoreProcessor.js","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?ce78","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?b4f3","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?1e7e","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?f46d","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?a7b6","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?2ea5","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?45e6","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?b758","webpack://sanyue_imghub/./src/utils/tokenExpiration.js","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?3739","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?ab49","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?4209","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?c551","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?780f","webpack://sanyue_imghub/./src/views/SystemConfig.vue","webpack://sanyue_imghub/./src/views/SystemConfig.vue?d269","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?3436","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05"],"sourcesContent":["import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"menu-list\"\n};\nconst _hoisted_2 = [\"onClick\"];\nconst _hoisted_3 = {\n class: \"menu-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"sidebar-container\", {\n 'is-collapsed': $props.isCollapse\n }]),\n ref: \"sidebar\",\n style: _normalizeStyle($options.sidebarStyle)\n }, [_createElementVNode(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.menuItems, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.index,\n class: _normalizeClass([\"menu-item\", {\n 'is-active': $props.activeIndex === item.index\n }]),\n onClick: $event => $options.handleSelect(item.index)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: item.icon,\n class: \"menu-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(item.titleKey)), 1)], 10, _hoisted_2);\n }), 128))]), _createElementVNode(\"div\", {\n class: \"toggle-button\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleCollapse && $options.toggleCollapse(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $props.isCollapse ? 'angle-double-right' : 'angle-double-left'\n }, null, 8, [\"icon\"])])], 6);\n}","export default {\n name: 'SysConfigTabs',\n props: {\n activeIndex: {\n type: String,\n default: 'status'\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n expandedWidth: null,\n menuItems: [{\n index: 'status',\n icon: 'chart-bar',\n titleKey: 'sysConfigTabs.systemStatus'\n }, {\n index: 'upload',\n icon: 'cloud-upload',\n titleKey: 'sysConfigTabs.uploadSettings'\n }, {\n index: 'security',\n icon: 'shield',\n titleKey: 'sysConfigTabs.securitySettings'\n }, {\n index: 'page',\n icon: 'pager',\n titleKey: 'sysConfigTabs.pageSettings'\n }, {\n index: 'others',\n icon: 'cog',\n titleKey: 'sysConfigTabs.otherSettings'\n }]\n };\n },\n computed: {\n collapsedWidth() {\n return window.innerWidth <= 768 ? 50 : 56;\n },\n sidebarStyle() {\n if (this.isCollapse) {\n return {\n width: this.collapsedWidth + 'px'\n };\n }\n return this.expandedWidth ? {\n width: this.expandedWidth + 'px'\n } : {};\n }\n },\n watch: {\n '$i18n.locale'() {\n this.$nextTick(() => this.measureWidth());\n }\n },\n methods: {\n toggleCollapse() {\n this.$emit('update:isCollapse', !this.isCollapse);\n },\n checkMobile() {\n const isMobile = window.innerWidth <= 768;\n this.$emit('update:isCollapse', isMobile);\n },\n handleSelect(index) {\n this.$emit('update:activeIndex', index);\n },\n measureWidth() {\n const el = this.$refs.sidebar;\n if (!el) return;\n // Temporarily expand to measure natural content width\n const prevWidth = el.style.width;\n const prevTransition = el.style.transition;\n const wasCollapsed = el.classList.contains('is-collapsed');\n el.style.transition = 'none';\n if (wasCollapsed) {\n el.classList.remove('is-collapsed');\n }\n el.style.width = 'auto';\n // Force reflow to apply changes\n void el.offsetWidth;\n const natural = el.scrollWidth;\n // Restore original state\n el.style.width = prevWidth;\n if (wasCollapsed) {\n el.classList.add('is-collapsed');\n }\n void el.offsetWidth;\n el.style.transition = prevTransition;\n this.expandedWidth = natural;\n }\n },\n mounted() {\n this.checkMobile();\n this.$nextTick(() => this.measureWidth());\n window.addEventListener('resize', this.checkMobile);\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.checkMobile);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysConfigTabs.vue?vue&type=template&id=a37302cc&scoped=true\"\nimport script from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\nexport * from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\n\nimport \"./SysConfigTabs.vue?vue&type=style&index=0&id=a37302cc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a37302cc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content admin-header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_SysConfigTabs = _resolveComponent(\"SysConfigTabs\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"systemConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_SysConfigTabs, {\n activeIndex: $data.activeIndex,\n \"onUpdate:activeIndex\": _cache[0] || (_cache[0] = $event => $data.activeIndex = $event),\n isCollapse: $data.isSidebarCollapse,\n \"onUpdate:isCollapse\": _cache[1] || (_cache[1] = $event => $data.isSidebarCollapse = $event)\n }, null, 8, [\"activeIndex\", \"isCollapse\"]), (_openBlock(), _createBlock(_resolveDynamicComponent($options.currentComponent), {\n class: _normalizeClass(['main-container', {\n 'collapsed': $data.isSidebarCollapse\n }])\n }, null, 8, [\"class\"]))]);\n}","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"date-range-calendar\"\n};\nconst _hoisted_2 = {\n class: \"selected-range\"\n};\nconst _hoisted_3 = {\n class: \"selected-range-inputs\"\n};\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n class: \"date-range-separator\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n class: \"calendar-header\"\n};\nconst _hoisted_8 = [\"aria-label\"];\nconst _hoisted_9 = {\n class: \"calendar-title\"\n};\nconst _hoisted_10 = [\"aria-label\"];\nconst _hoisted_11 = {\n class: \"calendar-weekdays\"\n};\nconst _hoisted_12 = {\n class: \"calendar-grid\"\n};\nconst _hoisted_13 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputStart = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.startDateLabel,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_4), [[_vModelText, $data.inputStart, void 0, {\n trim: true\n }]]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.rangeSeparator), 1), _withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.inputEnd = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.endDateLabel,\n onChange: _cache[3] || (_cache[3] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_6), [[_vModelText, $data.inputEnd, void 0, {\n trim: true\n }]])])]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.previousMonthLabel,\n onClick: _cache[4] || (_cache[4] = (...args) => $options.goToPreviousMonth && $options.goToPreviousMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-left\"\n })], 8, _hoisted_8), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.monthTitle), 1), _createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.nextMonthLabel,\n onClick: _cache[5] || (_cache[5] = (...args) => $options.goToNextMonth && $options.goToNextMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-right\"\n })], 8, _hoisted_10)]), _createElementVNode(\"div\", _hoisted_11, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.weekdayLabels, weekday => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: weekday\n }, _toDisplayString(weekday), 1);\n }), 128))]), _createElementVNode(\"div\", _hoisted_12, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.calendarDays, day => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: day.key,\n type: \"button\",\n class: _normalizeClass([\"calendar-day\", {\n 'is-muted': !day.isCurrentMonth,\n 'is-today': day.isToday,\n 'is-range-start': day.key === $data.draftStart,\n 'is-range-end': day.key === $data.draftEnd,\n 'is-in-range': $options.isInRange(day.key)\n }]),\n onClick: $event => $options.selectDay(day.key)\n }, _toDisplayString(day.dayOfMonth), 11, _hoisted_13);\n }), 128))])]);\n}","const DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateKey(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction parseDateKey(value) {\n if (typeof value !== 'string') return null;\n const match = value.trim().match(/^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})$/);\n if (!match) return null;\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = new Date(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction shiftMonth(date, amount) {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\nexport default {\n name: 'DateRangeCalendar',\n props: {\n modelValue: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return {\n displayYear: today.getFullYear(),\n displayMonth: today.getMonth(),\n draftStart: '',\n draftEnd: '',\n inputStart: '',\n inputEnd: '',\n awaitingEnd: false\n };\n },\n computed: {\n previousMonthLabel() {\n return this.$t('dateRangeCalendar.previousMonth');\n },\n nextMonthLabel() {\n return this.$t('dateRangeCalendar.nextMonth');\n },\n startDateLabel() {\n return this.$t('dateRangeCalendar.startDate');\n },\n endDateLabel() {\n return this.$t('dateRangeCalendar.endDate');\n },\n rangeSeparator() {\n return this.$t('dateRangeCalendar.rangeSeparator');\n },\n monthTitle() {\n return this.$t('dateRangeCalendar.monthTitle', {\n year: this.displayYear,\n month: padDatePart(this.displayMonth + 1)\n });\n },\n weekdayLabels() {\n return [this.$t('dateRangeCalendar.weekdaySun'), this.$t('dateRangeCalendar.weekdayMon'), this.$t('dateRangeCalendar.weekdayTue'), this.$t('dateRangeCalendar.weekdayWed'), this.$t('dateRangeCalendar.weekdayThu'), this.$t('dateRangeCalendar.weekdayFri'), this.$t('dateRangeCalendar.weekdaySat')];\n },\n calendarDays() {\n const monthStart = new Date(this.displayYear, this.displayMonth, 1);\n const start = new Date(this.displayYear, this.displayMonth, 1 - monthStart.getDay());\n const todayKey = formatDateKey(new Date());\n return Array.from({\n length: 42\n }, (_, index) => {\n const date = new Date(start.getTime() + index * DAY_MS);\n const key = formatDateKey(date);\n return {\n key,\n dayOfMonth: date.getDate(),\n isCurrentMonth: date.getMonth() === this.displayMonth,\n isToday: key === todayKey\n };\n });\n }\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(value) {\n this.syncFromModel(value);\n }\n }\n },\n methods: {\n syncFromModel(value) {\n const startDate = parseDateKey(value?.[0]);\n const endDate = parseDateKey(value?.[1]);\n this.draftStart = startDate ? formatDateKey(startDate) : '';\n this.draftEnd = endDate ? formatDateKey(endDate) : '';\n this.inputStart = this.draftStart;\n this.inputEnd = this.draftEnd;\n this.awaitingEnd = false;\n const displayDate = startDate || endDate;\n if (displayDate) {\n this.displayYear = displayDate.getFullYear();\n this.displayMonth = displayDate.getMonth();\n }\n },\n goToPreviousMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), -1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n goToNextMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), 1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n selectDay(key) {\n if (!this.draftStart || this.draftEnd || !this.awaitingEnd) {\n this.draftStart = key;\n this.draftEnd = '';\n this.inputStart = key;\n this.inputEnd = '';\n this.awaitingEnd = true;\n return;\n }\n const range = key < this.draftStart ? [key, this.draftStart] : [this.draftStart, key];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.commitRange(range);\n },\n handleManualInput() {\n const startDate = parseDateKey(this.inputStart);\n const endDate = parseDateKey(this.inputEnd);\n if (!startDate || !endDate) return;\n const startKey = formatDateKey(startDate);\n const endKey = formatDateKey(endDate);\n const range = startKey <= endKey ? [startKey, endKey] : [endKey, startKey];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.displayYear = startDate.getFullYear();\n this.displayMonth = startDate.getMonth();\n this.commitRange(range);\n },\n commitRange(range) {\n this.$emit('update:modelValue', range);\n this.$emit('change', range);\n },\n isInRange(key) {\n return Boolean(this.draftStart && this.draftEnd && key > this.draftStart && key < this.draftEnd);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DateRangeCalendar.vue?vue&type=template&id=5fbe496c&scoped=true\"\nimport script from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\nexport * from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\n\nimport \"./DateRangeCalendar.vue?vue&type=style&index=0&id=5fbe496c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5fbe496c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"status-panel\"\n};\nconst _hoisted_2 = [\"aria-label\"];\nconst _hoisted_3 = {\n class: \"status-hero-copy\"\n};\nconst _hoisted_4 = {\n class: \"status-hero-kicker\"\n};\nconst _hoisted_5 = {\n class: \"system-health-badge\",\n \"aria-live\": \"polite\"\n};\nconst _hoisted_6 = {\n class: \"status-hero-date\"\n};\nconst _hoisted_7 = {\n class: \"status-hero-title\"\n};\nconst _hoisted_8 = {\n class: \"status-hero-summary\",\n \"aria-live\": \"polite\"\n};\nconst _hoisted_9 = {\n class: \"status-hero-time-card\"\n};\nconst _hoisted_10 = {\n class: \"status-hero-time-caption\"\n};\nconst _hoisted_11 = [\"datetime\"];\nconst _hoisted_12 = {\n class: \"status-hero-timezone\"\n};\nconst _hoisted_13 = {\n class: \"overview-cards\"\n};\nconst _hoisted_14 = {\n class: \"card-icon\"\n};\nconst _hoisted_15 = {\n class: \"card-content\"\n};\nconst _hoisted_16 = {\n class: \"card-title\"\n};\nconst _hoisted_17 = {\n class: \"card-value\"\n};\nconst _hoisted_18 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_19 = {\n class: \"overview-card index-status\"\n};\nconst _hoisted_20 = {\n class: \"card-icon\"\n};\nconst _hoisted_21 = {\n class: \"card-content\"\n};\nconst _hoisted_22 = {\n class: \"card-title\"\n};\nconst _hoisted_23 = {\n class: \"card-value\"\n};\nconst _hoisted_24 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_25 = {\n class: \"card-icon\"\n};\nconst _hoisted_26 = {\n class: \"card-content\"\n};\nconst _hoisted_27 = {\n class: \"card-title\"\n};\nconst _hoisted_28 = {\n class: \"card-value\"\n};\nconst _hoisted_29 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_30 = {\n class: \"charts-section\"\n};\nconst _hoisted_31 = {\n class: \"chart-card trend-chart-card\"\n};\nconst _hoisted_32 = {\n class: \"chart-header trend-chart-header\"\n};\nconst _hoisted_33 = {\n class: \"chart-title\"\n};\nconst _hoisted_34 = {\n class: \"trend-controls\"\n};\nconst _hoisted_35 = {\n class: \"trend-date-panel\"\n};\nconst _hoisted_36 = {\n class: \"chart-content trend-chart-content\"\n};\nconst _hoisted_37 = {\n key: 0,\n class: \"empty-state trend-empty-state\"\n};\nconst _hoisted_38 = {\n key: 1,\n class: \"line-chart-wrapper\"\n};\nconst _hoisted_39 = {\n class: \"chart-card\"\n};\nconst _hoisted_40 = {\n class: \"chart-header\"\n};\nconst _hoisted_41 = {\n class: \"chart-content\"\n};\nconst _hoisted_42 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_43 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_44 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_45 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_46 = {\n class: \"center-value\"\n};\nconst _hoisted_47 = {\n class: \"center-label\"\n};\nconst _hoisted_48 = {\n class: \"chart-legend\"\n};\nconst _hoisted_49 = {\n class: \"legend-label\"\n};\nconst _hoisted_50 = {\n class: \"legend-value\"\n};\nconst _hoisted_51 = {\n class: \"legend-percent\"\n};\nconst _hoisted_52 = {\n class: \"chart-card\"\n};\nconst _hoisted_53 = {\n class: \"chart-header\"\n};\nconst _hoisted_54 = {\n class: \"chart-content\"\n};\nconst _hoisted_55 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_56 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_57 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_58 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_59 = {\n class: \"center-value\"\n};\nconst _hoisted_60 = {\n class: \"center-label\"\n};\nconst _hoisted_61 = {\n class: \"chart-legend\"\n};\nconst _hoisted_62 = {\n class: \"legend-label\"\n};\nconst _hoisted_63 = {\n class: \"legend-value\"\n};\nconst _hoisted_64 = {\n class: \"legend-percent\"\n};\nconst _hoisted_65 = {\n class: \"actions-section\"\n};\nconst _hoisted_66 = {\n class: \"action-card\"\n};\nconst _hoisted_67 = {\n class: \"action-header\"\n};\nconst _hoisted_68 = {\n class: \"action-content\"\n};\nconst _hoisted_69 = {\n key: 0,\n class: \"progress-container\"\n};\nconst _hoisted_70 = {\n class: \"progress-header\"\n};\nconst _hoisted_71 = {\n class: \"progress-phase\"\n};\nconst _hoisted_72 = {\n class: \"progress-percentage\"\n};\nconst _hoisted_73 = {\n class: \"progress-details\"\n};\nconst _hoisted_74 = {\n key: 0,\n class: \"progress-count\"\n};\nconst _hoisted_75 = {\n key: 1,\n class: \"progress-time\"\n};\nconst _hoisted_76 = {\n key: 0,\n class: \"progress-message\"\n};\nconst _hoisted_77 = {\n key: 1,\n class: \"error-container\"\n};\nconst _hoisted_78 = {\n class: \"error-icon\"\n};\nconst _hoisted_79 = {\n class: \"error-content\"\n};\nconst _hoisted_80 = {\n class: \"error-message\"\n};\nconst _hoisted_81 = {\n key: 0,\n class: \"error-suggestion\"\n};\nconst _hoisted_82 = {\n class: \"error-actions\"\n};\nconst _hoisted_83 = {\n key: 2,\n class: \"action-buttons\"\n};\nconst _hoisted_84 = {\n class: \"restore-section\"\n};\nconst _hoisted_85 = {\n key: 0,\n class: \"file-info-section\"\n};\nconst _hoisted_86 = [\"src\"];\nconst _hoisted_87 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_88 = {\n class: \"file-card-header\"\n};\nconst _hoisted_89 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_90 = {\n class: \"file-name\"\n};\nconst _hoisted_91 = {\n class: \"file-meta\"\n};\nconst _hoisted_92 = [\"src\"];\nconst _hoisted_93 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_94 = {\n class: \"file-card-header warning\"\n};\nconst _hoisted_95 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_96 = {\n class: \"file-name\"\n};\nconst _hoisted_97 = {\n class: \"file-meta\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_DateRangeCalendar = _resolveComponent(\"DateRangeCalendar\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_Line = _resolveComponent(\"Line\");\n const _component_Doughnut = _resolveComponent(\"Doughnut\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"section\", {\n class: _normalizeClass([\"status-hero\", `is-${$options.systemHealthState}`]),\n \"aria-label\": _ctx.$t('sysStatus.systemOverview')\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"span\", _hoisted_5, [_cache[12] || (_cache[12] = _createElementVNode(\"span\", {\n class: \"system-health-dot\",\n \"aria-hidden\": \"true\"\n }, null, -1)), _createTextVNode(\" \" + _toDisplayString($options.systemHealthLabel), 1)]), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.currentDateLabel), 1)]), _createElementVNode(\"h1\", _hoisted_7, _toDisplayString($options.greetingTitle), 1), _createElementVNode(\"p\", _hoisted_8, _toDisplayString($options.systemStatusSummary), 1)]), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('sysStatus.localTime')), 1), _createElementVNode(\"time\", {\n class: \"status-hero-time\",\n datetime: $data.currentTime.toISOString()\n }, _toDisplayString($options.currentTimeLabel), 9, _hoisted_11), _createElementVNode(\"span\", _hoisted_12, _toDisplayString($options.timeZoneLabel), 1)])], 10, _hoisted_2), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", {\n class: \"overview-card total-files\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.fetchIndexInfo && $options.fetchIndexInfo(...args))\n }, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\"\n })]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, _toDisplayString(_ctx.$t('sysStatus.totalFiles')), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('sysStatus.clickToRefresh')), 1)])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n })]), _createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t('sysStatus.indexUpdateTime')), 1), _createElementVNode(\"div\", _hoisted_23, _toDisplayString($options.formatTime($data.indexInfo.lastUpdated)), 1), _createElementVNode(\"div\", _hoisted_24, _toDisplayString($options.getTimeAgo($data.indexInfo.lastUpdated)), 1)])]), _createElementVNode(\"div\", {\n class: \"overview-card system-version\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.openReleases && $options.openReleases(...args))\n }, [_createElementVNode(\"div\", _hoisted_25, [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\"\n })]), _createElementVNode(\"div\", _hoisted_26, [_createElementVNode(\"div\", _hoisted_27, _toDisplayString(_ctx.$t('sysStatus.systemVersion')), 1), _createElementVNode(\"div\", _hoisted_28, \"v\" + _toDisplayString($data.version), 1), _createElementVNode(\"div\", _hoisted_29, _toDisplayString(_ctx.$t('sysStatus.clickToViewChangelog')), 1)])])]), _createElementVNode(\"div\", _hoisted_30, [_createElementVNode(\"div\", _hoisted_31, [_createElementVNode(\"div\", _hoisted_32, [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_font_awesome_icon, {\n icon: \"chart-line\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.uploadTrend')), 1), _createVNode(_component_el_button, {\n class: \"trend-calendar-btn\",\n circle: \"\",\n \"aria-label\": _ctx.$t('sysStatus.selectDateRange'),\n onClick: $options.openTrendDateDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"calendar\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_radio_group, {\n modelValue: $data.trendGroupBy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.trendGroupBy = $event),\n size: \"small\",\n class: \"trend-group-switch\",\n \"aria-label\": _ctx.$t('sysStatus.uploadTrendGroupBy')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"channel\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelType')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"channelName\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelName')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\"])])]), _createVNode(_component_el_dialog, {\n modelValue: $data.trendDatePickerVisible,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.trendDatePickerVisible = $event),\n title: _ctx.$t('sysStatus.selectDateRange'),\n width: $options.trendDateDialogWidth,\n class: \"trend-date-dialog\",\n \"align-center\": \"\",\n \"append-to-body\": \"\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_DateRangeCalendar, {\n modelValue: $data.trendDateRange,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.trendDateRange = $event),\n onChange: $options.handleTrendDateRangeChange\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createElementVNode(\"div\", _hoisted_36, [!$options.hasTrendData ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [_createVNode(_component_Line, {\n data: $options.uploadTrendChartData,\n options: $options.lineChartOptions\n }, null, 8, [\"data\", \"options\"])]))])]), _createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_font_awesome_icon, {\n icon: \"share-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.channelDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_41, [Object.keys($data.indexInfo.channelStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_42, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_43, [_createElementVNode(\"div\", _hoisted_44, [_createVNode(_component_Doughnut, {\n data: $options.channelChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_45, [_createElementVNode(\"div\", _hoisted_46, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_47, _toDisplayString(_ctx.$t('sysStatus.totalFilesLabel')), 1)])]), _createElementVNode(\"div\", _hoisted_48, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.indexInfo.channelStats, (count, channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_49, _toDisplayString(channel), 1), _createElementVNode(\"span\", _hoisted_50, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_51, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])]), _createElementVNode(\"div\", _hoisted_52, [_createElementVNode(\"div\", _hoisted_53, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.fileStatusDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_54, [Object.keys($data.indexInfo.typeStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_55, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_56, [_createElementVNode(\"div\", _hoisted_57, [_createVNode(_component_Doughnut, {\n data: $options.typeChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_58, [_createElementVNode(\"div\", _hoisted_59, _toDisplayString(Object.keys($data.indexInfo.typeStats).length), 1), _createElementVNode(\"div\", _hoisted_60, _toDisplayString(_ctx.$t('sysStatus.statusTypes')), 1)])]), _createElementVNode(\"div\", _hoisted_61, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.aggregatedTypeStats, (count, status, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: status,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getTypeChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_62, _toDisplayString(status), 1), _createElementVNode(\"span\", _hoisted_63, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_64, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])])]), _createElementVNode(\"div\", _hoisted_65, [_createElementVNode(\"div\", _hoisted_66, [_createElementVNode(\"div\", _hoisted_67, [_createVNode(_component_font_awesome_icon, {\n icon: \"tools\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.systemMaintenance')), 1)]), _createElementVNode(\"div\", _hoisted_68, [$data.isProcessing ? (_openBlock(), _createElementBlock(\"div\", _hoisted_69, [_createElementVNode(\"div\", _hoisted_70, [_createElementVNode(\"span\", _hoisted_71, _toDisplayString($options.phaseDescription), 1), _createElementVNode(\"span\", _hoisted_72, _toDisplayString(Math.round($data.processingProgress.percentage)) + \"%\", 1)]), _createVNode(_component_el_progress, {\n percentage: $data.processingProgress.percentage,\n \"stroke-width\": 12,\n \"show-text\": false,\n class: \"progress-bar\"\n }, null, 8, [\"percentage\"]), _createElementVNode(\"div\", _hoisted_73, [$data.processingProgress.current > 0 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_74, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.processingProgress.current.toLocaleString()) + \" \", 1), $data.processingProgress.total > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createTextVNode(\" / \" + _toDisplayString($data.processingProgress.total.toLocaleString()), 1)], 64)) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.records')), 1)])) : _createCommentVNode(\"\", true), $options.estimatedTimeRemaining ? (_openBlock(), _createElementBlock(\"span\", _hoisted_75, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n }), _createTextVNode(\" \" + _toDisplayString($options.estimatedTimeRemaining), 1)])) : _createCommentVNode(\"\", true)]), $data.processingProgress.message ? (_openBlock(), _createElementBlock(\"div\", _hoisted_76, _toDisplayString($data.processingProgress.message), 1)) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n size: \"small\",\n onClick: $options.cancelOperation,\n class: \"cancel-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.cancelOperation')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : $data.processingError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_77, [_createElementVNode(\"div\", _hoisted_78, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\"\n })]), _createElementVNode(\"div\", _hoisted_79, [_createElementVNode(\"div\", _hoisted_80, _toDisplayString($data.processingError.message), 1), $data.processingError.suggestion ? (_openBlock(), _createElementBlock(\"div\", _hoisted_81, _toDisplayString($data.processingError.suggestion), 1)) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_82, [$data.processingError.recoverable ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n size: \"small\",\n onClick: $options.retryOperation\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"default\",\n size: \"small\",\n onClick: $options.dismissError\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_83, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.rebuildTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.rebuilding,\n disabled: $data.isProcessing,\n onClick: $options.rebuildIndex,\n class: \"action-btn rebuild-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.rebuilding ? _ctx.$t('sysStatus.rebuilding') : _ctx.$t('sysStatus.rebuildIndex')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.backupTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"success\",\n loading: $data.backing,\n disabled: $data.isProcessing,\n onClick: $options.backupData,\n class: \"action-btn backup-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n }), _createTextVNode(\" \" + _toDisplayString($data.backing ? _ctx.$t('sysStatus.backingUp') : _ctx.$t('sysStatus.backupData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.restoreTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_84, [_createElementVNode(\"input\", {\n type: \"file\",\n ref: \"fileInput\",\n accept: \".json\",\n onChange: _cache[5] || (_cache[5] = (...args) => $options.handleFileSelect && $options.handleFileSelect(...args)),\n style: {\n \"display\": \"none\"\n }\n }, null, 544), _createVNode(_component_el_button, {\n type: \"warning\",\n loading: $data.restoring,\n disabled: $data.isProcessing,\n onClick: $options.selectRestoreFile,\n class: \"action-btn restore-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"upload\"\n }), _createTextVNode(\" \" + _toDisplayString($data.restoring ? _ctx.$t('sysStatus.restoring') : _ctx.$t('sysStatus.restoreData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])])]),\n _: 1\n }, 8, [\"content\"])]))])])]), $data.indexInfo.newestFile || $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", _hoisted_85, [$data.indexInfo.newestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"file-info-card info-card-newest\",\n onClick: _cache[8] || (_cache[8] = $event => $options.openFileInNewTab($data.indexInfo.newestFile))\n }, [$options.isImageFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[6] || (_cache[6] = $event => $options.handleImageError('newest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[7] || (_cache[7] = $event => $options.handleImageError('newest'))\n }, null, 40, _hoisted_86)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_87, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_88, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.latestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_89, [_createElementVNode(\"div\", _hoisted_90, _toDisplayString($data.indexInfo.newestFile.metadata?.FileName || $data.indexInfo.newestFile.id), 1), _createElementVNode(\"div\", _hoisted_91, _toDisplayString($options.formatTime($data.indexInfo.newestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true), $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-info-card info-card-oldest\",\n onClick: _cache[11] || (_cache[11] = $event => $options.openFileInNewTab($data.indexInfo.oldestFile))\n }, [$options.isImageFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[9] || (_cache[9] = $event => $options.handleImageError('oldest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[10] || (_cache[10] = $event => $options.handleImageError('oldest'))\n }, null, 40, _hoisted_92)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_93, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_94, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.earliestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_95, [_createElementVNode(\"div\", _hoisted_96, _toDisplayString($data.indexInfo.oldestFile.metadata?.FileName || $data.indexInfo.oldestFile.id), 1), _createElementVNode(\"div\", _hoisted_97, _toDisplayString($options.formatTime($data.indexInfo.oldestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)])), [[_directive_loading, $data.loading]]);\n}","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, vScale, _parsed} = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = (_parsed\n .slice(0, start + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = (_parsed\n .slice(end - 1)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n if (!ctx && !canvas) {\n return;\n }\n\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy,\n context: AnyObject,\n subProxy?: ResolverProxy,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart | PrivateChart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart | PrivateChart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n\n (chart as PrivateChart).height = round1(chart.height);\n (chart as PrivateChart).width = round1(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n\n if (!found && !options.all) {\n return 0;\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n const {iScale, vScale} = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n const skipNull = (meta) => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n _getAxisCount() {\n return this._getAxis().length;\n }\n\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(\n this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n )] = true;\n }\n return Object.keys(axis);\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: string): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: string): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options?: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase as {\n new (options?: AnyObject): DateAdapter;\n override(\n members: Partial, 'options'>>\n ): void;\n }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {vScale} = controller._cachedMeta;\n const {_parsed} = metaset;\n\n const distanceToDefinedLo = (_parsed\n .slice(0, result.lo + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.lo -= Math.max(0, distanceToDefinedLo);\n\n const distanceToDefinedHi = (_parsed\n .slice(result.hi)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

(props: P, final?: boolean): Pick;\n getProps

(props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = undefined;\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n if (this._init === undefined) { // Do not trigger events before install\n return;\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined; // Do not trigger events after uninstall\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n // Unset pending resize request now to avoid possible recursion within _resize\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n // @ts-expect-error\n const clip = getDatasetClipArea(this, meta);\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (clip) {\n clipArea(ctx, clip);\n }\n\n meta.controller.draw();\n\n if (clip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the event inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of a segment -> need to add another point before this,\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of a segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {chart, index, line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale, clip} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {line, target, color: below, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale, clip} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n\n ctx.beginPath();\n\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { PropType } from 'vue'\nimport type {\n ChartType,\n ChartData,\n ChartOptions,\n Plugin,\n UpdateMode\n} from 'chart.js'\n\nexport const CommonProps = {\n data: {\n type: Object as PropType,\n required: true\n },\n options: {\n type: Object as PropType,\n default: () => ({})\n },\n plugins: {\n type: Array as PropType,\n default: () => []\n },\n datasetIdKey: {\n type: String,\n default: 'label'\n },\n updateMode: {\n type: String as PropType,\n default: undefined\n }\n} as const\n\nexport const A11yProps = {\n ariaLabel: {\n type: String\n },\n ariaDescribedby: {\n type: String\n }\n} as const\n\nexport const Props = {\n type: {\n type: String as PropType,\n required: true\n },\n destroyDelay: {\n type: Number,\n default: 0 // No delay by default\n },\n ...CommonProps,\n ...A11yProps\n} as const\n","import { isProxy, toRaw, version } from 'vue'\nimport type {\n Chart,\n ChartType,\n ChartData,\n ChartDataset,\n ChartOptions,\n DefaultDataPoint\n} from 'chart.js'\n\nexport const compatProps =\n version[0] === '2'\n ? (internals: I, props: T) =>\n Object.assign(internals, { attrs: props }) as unknown as I & T\n : (internals: I, props: T) =>\n Object.assign(internals, props)\n\nexport function toRawIfProxy(obj: T) {\n return isProxy(obj) ? toRaw(obj) : obj\n}\n\nexport function cloneProxy(obj: T, src = obj) {\n return isProxy(src) ? new Proxy(obj, {}) : obj\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(chart: Chart, nextOptions: ChartOptions) {\n const options = chart.options\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions)\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextDatasets: ChartDataset[],\n datasetIdKey: string\n) {\n const addedDatasets: ChartDataset[] = []\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n )\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset\n }\n\n addedDatasets.push(currentDataset)\n\n Object.assign(currentDataset, nextDataset)\n\n return currentDataset\n }\n )\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(data: ChartData, datasetIdKey: string) {\n const nextData: ChartData = {\n labels: [],\n datasets: []\n }\n\n setLabels(nextData, data.labels)\n setDatasets(nextData, data.datasets, datasetIdKey)\n\n return nextData\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'dataset',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'nearest',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'index',\n { intersect: true },\n false\n )\n}\n","import { Chart as ChartJS } from 'chart.js'\nimport {\n defineComponent,\n h,\n nextTick,\n onUnmounted,\n onMounted,\n ref,\n shallowRef,\n toRaw,\n watch\n} from 'vue'\n\nimport type { ChartComponent } from './types.js'\nimport { Props } from './props.js'\nimport {\n cloneData,\n setLabels,\n setDatasets,\n setOptions,\n toRawIfProxy,\n cloneProxy\n} from './utils.js'\n\nexport const Chart = defineComponent({\n props: Props,\n setup(props, { expose, slots }) {\n const canvasRef = ref(null)\n const chartRef = shallowRef(null)\n\n expose({ chart: chartRef })\n\n const renderChart = () => {\n if (!canvasRef.value) return\n\n const { type, data, options, plugins, datasetIdKey } = props\n const clonedData = cloneData(data, datasetIdKey)\n const proxiedData = cloneProxy(clonedData, data)\n\n chartRef.value = new ChartJS(canvasRef.value, {\n type,\n data: proxiedData,\n options: { ...options },\n plugins\n })\n }\n\n const destroyChart = () => {\n const chart = toRaw(chartRef.value)\n\n if (chart) {\n if (props.destroyDelay > 0) {\n setTimeout(() => {\n chart.destroy()\n chartRef.value = null\n }, props.destroyDelay)\n } else {\n chart.destroy()\n chartRef.value = null\n }\n }\n }\n\n const update = (chart: ChartJS) => {\n chart.update(props.updateMode)\n }\n\n onMounted(renderChart)\n\n onUnmounted(destroyChart)\n\n watch(\n [() => props.options, () => props.data],\n (\n [nextOptionsProxy, nextDataProxy],\n [prevOptionsProxy, prevDataProxy]\n ) => {\n const chart = toRaw(chartRef.value)\n\n if (!chart) {\n return\n }\n\n let shouldUpdate = false\n\n if (nextOptionsProxy) {\n const nextOptions = toRawIfProxy(nextOptionsProxy)\n const prevOptions = toRawIfProxy(prevOptionsProxy)\n\n if (nextOptions && nextOptions !== prevOptions) {\n setOptions(chart, nextOptions)\n shouldUpdate = true\n }\n }\n\n if (nextDataProxy) {\n const nextLabels = toRawIfProxy(nextDataProxy.labels)\n const prevLabels = toRawIfProxy(prevDataProxy.labels)\n const nextDatasets = toRawIfProxy(nextDataProxy.datasets)\n const prevDatasets = toRawIfProxy(prevDataProxy.datasets)\n\n if (nextLabels !== prevLabels) {\n setLabels(chart.config.data, nextLabels)\n shouldUpdate = true\n }\n\n if (nextDatasets && nextDatasets !== prevDatasets) {\n setDatasets(chart.config.data, nextDatasets, props.datasetIdKey)\n shouldUpdate = true\n }\n }\n\n if (shouldUpdate) {\n nextTick(() => {\n update(chart)\n })\n }\n },\n { deep: true }\n )\n\n return () => {\n return h(\n 'canvas',\n {\n role: 'img',\n 'aria-label': props.ariaLabel,\n 'aria-describedby': props.ariaDescribedby,\n ref: canvasRef\n },\n [h('p', {}, [slots.default ? slots.default() : ''])]\n )\n }\n }\n}) as ChartComponent\n","import { defineComponent, shallowRef, h } from 'vue'\nimport type { ChartType, ChartComponentLike, DefaultDataPoint } from 'chart.js'\nimport {\n Chart as ChartJS,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController\n} from 'chart.js'\nimport type { DistributiveArray } from 'chart.js/dist/types/utils'\nimport type { TypedChartComponent, ChartComponentRef } from './types.js'\nimport { CommonProps } from './props.js'\nimport { Chart } from './chart.js'\nimport { compatProps } from './utils.js'\n\nexport function createTypedChart<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n type: TType,\n registerables: ChartComponentLike\n): TypedChartComponent {\n ChartJS.register(registerables)\n\n return defineComponent({\n props: CommonProps,\n setup(props, { expose }) {\n const ref = shallowRef(null)\n const reforwardRef = (chartRef: ChartComponentRef) => {\n ref.value = chartRef?.chart\n }\n\n expose({ chart: ref })\n\n return () => {\n return h(\n Chart,\n compatProps(\n {\n ref: reforwardRef as any\n },\n {\n type,\n ...props\n }\n )\n )\n }\n }\n }) as any\n}\n\nexport interface ExtendedDataPoint {\n [key: string]: string | number | null | ExtendedDataPoint\n}\n\nexport const Bar = /* #__PURE__ */ createTypedChart<\n 'bar',\n DefaultDataPoint<'bar'> | DistributiveArray\n>('bar', BarController)\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n)\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController)\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController)\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n)\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController)\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n)\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n)\n","/**\r\n * BatchProcessor - 批量数据处理类\r\n * \r\n * 处理批量数据获取和处理的核心类,使用 cursor 分页机制获取所有数据。\r\n * 支持进度回调和取消功能。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\n\r\n/**\r\n * 批量操作错误类\r\n * 提供错误代码、是否可恢复、建议操作等信息\r\n */\r\nexport class BatchOperationError extends Error {\r\n constructor(message, code, recoverable = false, suggestion = '') {\r\n super(message);\r\n this.name = 'BatchOperationError';\r\n this.code = code;\r\n this.recoverable = recoverable;\r\n this.suggestion = suggestion;\r\n }\r\n}\r\n\r\n/**\r\n * 错误处理器映射\r\n * 根据 HTTP 状态码返回对应的错误对象\r\n */\r\nconst ERROR_HANDLERS = {\r\n 401: () => new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n ),\r\n 403: () => new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n ),\r\n 400: (details) => new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n ),\r\n 500: () => new BatchOperationError(\r\n '服务器内部错误',\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试,如果问题持续请联系管理员'\r\n ),\r\n NETWORK: () => new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n ),\r\n ABORT: () => new BatchOperationError(\r\n '操作已取消',\r\n 'ABORTED',\r\n false,\r\n ''\r\n )\r\n};\r\n\r\n/**\r\n * 根据错误创建 BatchOperationError\r\n * @param {Error|Response} error - 原始错误或响应对象\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\nfunction createError(error, details = '') {\r\n // 处理取消操作\r\n if (error.name === 'AbortError') {\r\n return ERROR_HANDLERS.ABORT();\r\n }\r\n \r\n // 处理 HTTP 响应错误\r\n if (error instanceof Response || (error && typeof error.status === 'number')) {\r\n const handler = ERROR_HANDLERS[error.status];\r\n if (handler) {\r\n return handler(details);\r\n }\r\n return new BatchOperationError(\r\n `请求失败: ${error.status}`,\r\n 'HTTP_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n \r\n // 处理网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n return ERROR_HANDLERS.NETWORK();\r\n }\r\n \r\n // 其他错误\r\n return new BatchOperationError(\r\n error.message || '未知错误',\r\n 'UNKNOWN_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n}\r\n\r\n/**\r\n * BatchProcessor 类\r\n * \r\n * 用于批量获取和处理数据的核心类\r\n */\r\nclass BatchProcessor {\r\n /**\r\n * 创建 BatchProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.batchSize - 每批数据量,默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.batchSize = options.batchSize || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.abortController = null;\r\n }\r\n\r\n /**\r\n * 获取所有数据记录\r\n * 使用 cursor 分页机制循环获取所有数据,直到没有更多数据或操作被取消\r\n * \r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 所有记录的数组\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async fetchAllRecords(includeValue = false) {\r\n // 创建新的 AbortController 用于取消操作\r\n this.abortController = new AbortController();\r\n const allRecords = [];\r\n let cursor = null;\r\n let totalFetched = 0;\r\n let batchCount = 0;\r\n\r\n try {\r\n do {\r\n // 检查是否已取消\r\n if (this.abortController.signal.aborted) {\r\n break;\r\n }\r\n\r\n // 获取一批数据\r\n const response = await this.fetchBatch(cursor, includeValue);\r\n \r\n // 合并数据到总数组\r\n allRecords.push(...response.records);\r\n cursor = response.nextCursor;\r\n totalFetched += response.records.length;\r\n batchCount++;\r\n\r\n // 调用进度回调\r\n this.onProgress({\r\n phase: 'fetching',\r\n current: totalFetched,\r\n batchCount: batchCount,\r\n message: `已获取 ${totalFetched} 条记录...`\r\n });\r\n\r\n } while (cursor && !this.abortController.signal.aborted);\r\n\r\n // 如果是因为取消而退出循环,抛出取消错误\r\n if (this.abortController.signal.aborted) {\r\n throw ERROR_HANDLERS.ABORT();\r\n }\r\n\r\n return allRecords;\r\n } catch (error) {\r\n // 调用错误回调\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : createError(error);\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 获取单批数据\r\n * \r\n * @param {string|null} cursor - 分页游标,首次请求为 null\r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 包含 records 和 nextCursor 的响应对象\r\n * @throws {BatchOperationError} 当请求失败时抛出\r\n */\r\n async fetchBatch(cursor, includeValue) {\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (cursor) {\r\n params.set('cursor', cursor);\r\n }\r\n if (includeValue) {\r\n params.set('includeValue', 'true');\r\n }\r\n params.set('limit', String(this.batchSize));\r\n\r\n try {\r\n // 发送请求,传入 abort signal 支持取消\r\n const response = await fetchWithAuth(\r\n `/api/manage/batch/list?${params}`,\r\n { signal: this.abortController.signal }\r\n );\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw createError(response, errorDetails);\r\n }\r\n\r\n // 解析响应数据\r\n const data = await response.json();\r\n \r\n // 验证响应格式\r\n if (!data.success) {\r\n throw new BatchOperationError(\r\n data.error || '请求失败',\r\n 'API_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return {\r\n records: data.records || [],\r\n nextCursor: data.nextCursor || null,\r\n totalProcessed: data.totalProcessed || 0\r\n };\r\n } catch (error) {\r\n // 如果已经是 BatchOperationError,直接抛出\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 否则转换为 BatchOperationError\r\n throw createError(error);\r\n }\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n * 调用此方法将中止正在进行的 fetch 请求\r\n */\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.abortController ? this.abortController.signal.aborted : false;\r\n }\r\n\r\n /**\r\n * 重置处理器状态\r\n * 在开始新的批量操作前调用\r\n */\r\n reset() {\r\n this.abortController = null;\r\n }\r\n}\r\n\r\nexport default BatchProcessor;\r\n","/**\r\n * IndexRebuilder - 索引重建类\r\n * \r\n * 处理索引重建的完整流程,包括数据获取、排序、分块上传和完成。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport BatchProcessor, { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * IndexRebuilder 类\r\n * \r\n * 用于重建索引的核心类,协调数据获取、排序和分块上传\r\n */\r\nclass IndexRebuilder {\r\n /**\r\n * 创建 IndexRebuilder 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每个分块的记录数,默认从后端获取\r\n * @param {number} options.maxRetries - 分块上传最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || null; // 从后端获取\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.sessionId = this.generateSessionId();\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 从后端获取索引配置(分块大小等)\r\n * @returns {Promise} 配置对象 { chunkSize, databaseType }\r\n */\r\n async fetchConfig() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/config');\r\n if (!response.ok) {\r\n throw new Error('获取配置失败');\r\n }\r\n const result = await response.json();\r\n if (result.success) {\r\n return {\r\n chunkSize: result.chunkSize || 500,\r\n databaseType: result.databaseType || 'unknown'\r\n };\r\n }\r\n throw new Error(result.error || '获取配置失败');\r\n } catch (error) {\r\n // 获取失败时使用保守的默认值(兼容 D1)\r\n console.warn('Failed to fetch index config, using default:', error);\r\n return { chunkSize: 500, databaseType: 'unknown' };\r\n }\r\n }\r\n\r\n /**\r\n * 执行索引重建\r\n * \r\n * 完整流程:\r\n * 1. 获取配置(分块大小)\r\n * 2. 获取所有记录\r\n * 3. 按时间戳降序排序\r\n * 4. 分块上传\r\n * 5. 完成重建\r\n * \r\n * @returns {Promise} 重建结果 { success: boolean, totalFiles: number }\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async rebuild() {\r\n this.aborted = false;\r\n \r\n try {\r\n // 获取配置(分块大小)\r\n if (!this.chunkSize) {\r\n const config = await this.fetchConfig();\r\n this.chunkSize = config.chunkSize;\r\n }\r\n\r\n // 获取所有记录\r\n this.onProgress({ \r\n phase: 'fetching', \r\n message: '正在获取数据...',\r\n current: 0\r\n });\r\n \r\n const processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' }),\r\n onError: (e) => this.onError(e)\r\n });\r\n \r\n const records = await processor.fetchAllRecords(false);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 排序(按时间戳降序)\r\n this.onProgress({ \r\n phase: 'sorting', \r\n message: '正在排序...',\r\n current: 0,\r\n total: records.length\r\n });\r\n \r\n this.sortByTimestampDescending(records);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 分块上传\r\n const chunks = this.splitIntoChunks(records);\r\n \r\n for (let i = 0; i < chunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n \r\n // 使用重试机制上传分块\r\n await this.uploadChunkWithRetry(chunks[i], i);\r\n \r\n this.onProgress({\r\n phase: 'uploading',\r\n current: i + 1,\r\n total: chunks.length,\r\n message: `正在上传分块 ${i + 1}/${chunks.length}...`\r\n });\r\n }\r\n\r\n // 完成重建\r\n this.onProgress({ \r\n phase: 'finalizing', \r\n message: '正在完成重建...',\r\n current: chunks.length,\r\n total: chunks.length\r\n });\r\n \r\n await this.finalize(chunks.length, records.length);\r\n\r\n this.onProgress({\r\n phase: 'completed',\r\n message: `索引重建完成,共 ${records.length} 个文件`,\r\n current: records.length,\r\n total: records.length\r\n });\r\n\r\n return { success: true, totalFiles: records.length };\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : new BatchOperationError(\r\n error.message || '索引重建失败',\r\n 'REBUILD_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 按时间戳降序排序记录\r\n * \r\n * @param {Array} records - 要排序的记录数组(原地排序)\r\n */\r\n sortByTimestampDescending(records) {\r\n records.sort((a, b) => {\r\n const timestampA = (a.metadata && a.metadata.TimeStamp) || 0;\r\n const timestampB = (b.metadata && b.metadata.TimeStamp) || 0;\r\n return timestampB - timestampA;\r\n });\r\n }\r\n\r\n /**\r\n * 将记录分割为多个块\r\n * \r\n * @param {Array} records - 要分割的记录数组\r\n * @returns {Array} 分块后的二维数组\r\n */\r\n splitIntoChunks(records) {\r\n const chunks = [];\r\n for (let i = 0; i < records.length; i += this.chunkSize) {\r\n chunks.push(records.slice(i, i + this.chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当所有重试都失败时抛出\r\n */\r\n async uploadChunkWithRetry(chunk, chunkId) {\r\n let lastError;\r\n \r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(chunk, chunkId);\r\n } catch (error) {\r\n lastError = error;\r\n \r\n // 不重试的错误类型\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' || \r\n error.code === 'FORBIDDEN' || \r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n \r\n // 如果还有重试机会,等待后重试\r\n if (attempt < this.maxRetries) {\r\n // 指数退避\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n \r\n this.onProgress({\r\n phase: 'retrying',\r\n message: `分块 ${chunkId + 1} 上传失败,正在重试 (${attempt}/${this.maxRetries})...`,\r\n current: chunkId,\r\n attempt: attempt\r\n });\r\n }\r\n }\r\n }\r\n \r\n // 所有重试都失败\r\n throw lastError instanceof BatchOperationError \r\n ? lastError \r\n : new BatchOperationError(\r\n `分块 ${chunkId + 1} 上传失败,已重试 ${this.maxRetries} 次`,\r\n 'CHUNK_UPLOAD_FAILED',\r\n false,\r\n '请检查网络连接后重新开始重建'\r\n );\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当上传失败时抛出\r\n */\r\n async uploadChunk(chunk, chunkId) {\r\n const checksum = await this.calculateChecksum(chunk);\r\n \r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n chunkId: String(chunkId),\r\n sessionId: this.sessionId,\r\n data: chunk,\r\n checksum\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 完成索引重建\r\n * \r\n * @param {number} totalChunks - 总分块数\r\n * @param {number} totalFiles - 总文件数\r\n * @returns {Promise} 完成响应\r\n * @throws {BatchOperationError} 当完成请求失败时抛出\r\n */\r\n async finalize(totalChunks, totalFiles) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/finalize', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sessionId: this.sessionId,\r\n totalChunks,\r\n totalFiles\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n throw new BatchOperationError(\r\n error.message || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 生成唯一的会话 ID\r\n * \r\n * @returns {string} 会话 ID\r\n */\r\n generateSessionId() {\r\n return `rebuild_${Date.now()}_${Math.random().toString(36).slice(2)}`;\r\n }\r\n\r\n /**\r\n * 计算数据的 SHA-256 校验和\r\n * \r\n * @param {Array} data - 要计算校验和的数据\r\n * @returns {Promise} 十六进制格式的校验和\r\n */\r\n async calculateChecksum(data) {\r\n const text = JSON.stringify(data);\r\n const encoder = new TextEncoder();\r\n const dataBuffer = encoder.encode(text);\r\n\r\n // crypto.subtle 仅在安全上下文(HTTPS / localhost)下可用\r\n // 通过 0.0.0.0 等非安全上下文访问时需要 fallback\r\n if (typeof crypto !== 'undefined' && crypto.subtle) {\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n // Fallback: 简单但足够用于校验的哈希实现 (FNV-1a 变体, 产生 64 位十六进制)\r\n let h1 = 0x811c9dc5 >>> 0;\r\n let h2 = 0x811c9dc5 >>> 0;\r\n for (let i = 0; i < dataBuffer.length; i++) {\r\n h1 = Math.imul(h1 ^ dataBuffer[i], 0x01000193) >>> 0;\r\n h2 = Math.imul(h2 ^ dataBuffer[i], 0x01000193 + 0x10) >>> 0;\r\n }\r\n return h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n }\r\n\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n * \r\n * @param {number} status - HTTP 状态码\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n );\r\n case 404:\r\n return new BatchOperationError(\r\n '会话不存在',\r\n 'SESSION_NOT_FOUND',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 410:\r\n return new BatchOperationError(\r\n '会话已过期',\r\n 'SESSION_EXPIRED',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n * \r\n * @param {number} ms - 延迟毫秒数\r\n * @returns {Promise}\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n\r\n /**\r\n * 重置重建器状态\r\n * 在开始新的重建操作前调用\r\n */\r\n reset() {\r\n this.aborted = false;\r\n this.sessionId = this.generateSessionId();\r\n }\r\n}\r\n\r\nexport default IndexRebuilder;\r\n","/**\r\n * BackupGenerator - 备份数据生成类\r\n * \r\n * 处理前端辅助备份功能,获取所有文件记录(包含分块文件的 value),\r\n * 构建完整的备份 JSON 文件,并触发浏览器下载。\r\n */\r\n\r\nimport BatchProcessor from '@/utils/batchProcessor';\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport packageInfo from '../../package.json'\r\n\r\n/**\r\n * BackupGenerator 类\r\n * \r\n * 用于生成和下载备份数据的类\r\n */\r\nclass BackupGenerator {\r\n /**\r\n * 创建 BackupGenerator 实例\r\n * @param {Object} options - 配置选项\r\n * @param {Function} options.onProgress - 进度回调函数\r\n */\r\n constructor(options = {}) {\r\n this.onProgress = options.onProgress || (() => {});\r\n this.processor = null;\r\n }\r\n\r\n /**\r\n * 生成并下载备份\r\n * \r\n * 完整流程:\r\n * 1. 获取所有文件记录(包含分块文件的 value)\r\n * 2. 构建备份数据结构\r\n * 3. 获取系统设置\r\n * 4. 生成并触发下载\r\n * \r\n * @returns {Promise} 包含 success 和 fileCount 的结果对象\r\n * @throws {Error} 当备份过程中发生错误时抛出\r\n */\r\n async generateBackup() {\r\n // 获取所有文件记录(包含分块文件的 value)\r\n this.processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' })\r\n });\r\n\r\n const records = await this.processor.fetchAllRecords(true);\r\n\r\n // 构建备份数据\r\n this.onProgress({ phase: 'building', message: '正在构建备份数据...' });\r\n\r\n const backupData = {\r\n timestamp: Date.now(),\r\n version: packageInfo.version,\r\n data: {\r\n fileCount: records.length,\r\n files: {},\r\n settings: {}\r\n }\r\n };\r\n\r\n // 将记录转换为以 id 为键的对象格式\r\n for (const record of records) {\r\n backupData.data.files[record.id] = {\r\n metadata: record.metadata,\r\n value: record.value || null\r\n };\r\n }\r\n\r\n // 3. 获取系统设置\r\n const settings = await this.fetchSettings();\r\n backupData.data.settings = settings;\r\n\r\n // 生成下载\r\n this.onProgress({ phase: 'downloading', message: '正在生成下载...' });\r\n this.downloadBackup(backupData);\r\n\r\n const settingsCount = Object.keys(settings).length;\r\n return { success: true, fileCount: records.length, settingsCount };\r\n }\r\n\r\n /**\r\n * 获取系统设置\r\n * \r\n * @returns {Promise} 系统设置对象,失败时返回空对象\r\n */\r\n async fetchSettings() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/settings');\r\n if (!response.ok) {\r\n console.warn('Failed to fetch settings:', response.status);\r\n return {};\r\n }\r\n const data = await response.json();\r\n // 返回 settings 字段,而不是整个响应\r\n return data.settings || {};\r\n } catch (error) {\r\n console.warn('Failed to fetch settings:', error);\r\n return {};\r\n }\r\n }\r\n\r\n /**\r\n * 触发浏览器下载备份文件\r\n * \r\n * @param {Object} data - 备份数据对象\r\n */\r\n downloadBackup(data) {\r\n // 将数据转换为格式化的 JSON 字符串\r\n const json = JSON.stringify(data, null, 2);\r\n \r\n // 创建 Blob 对象\r\n const blob = new Blob([json], { type: 'application/json' });\r\n \r\n // 创建下载 URL\r\n const url = URL.createObjectURL(blob);\r\n\r\n // 创建临时下载链接\r\n const a = document.createElement('a');\r\n a.href = url;\r\n // 使用日期作为文件名的一部分\r\n a.download = `imgbed_backup_${new Date().toISOString().split('T')[0]}.json`;\r\n \r\n // 触发下载\r\n document.body.appendChild(a);\r\n a.click();\r\n \r\n // 清理\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n /**\r\n * 取消当前备份操作\r\n */\r\n abort() {\r\n if (this.processor) {\r\n this.processor.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.processor ? this.processor.isAborted() : false;\r\n }\r\n}\r\n\r\nexport default BackupGenerator;\r\n","/**\r\n * RestoreProcessor - 分批恢复数据类\r\n * \r\n * 将备份数据分批上传到后端进行恢复,避免 CPU 超时\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * RestoreProcessor 类\r\n */\r\nclass RestoreProcessor {\r\n /**\r\n * 创建 RestoreProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每批数据量,默认 50\r\n * @param {number} options.maxRetries - 最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || 50;\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 执行恢复操作\r\n * \r\n * @param {Object} backupData - 备份数据对象\r\n * @returns {Promise} 恢复结果\r\n */\r\n async restore(backupData) {\r\n this.aborted = false;\r\n\r\n // 验证备份数据格式\r\n if (!backupData || !backupData.data) {\r\n throw new BatchOperationError(\r\n '备份文件格式无效',\r\n 'INVALID_BACKUP',\r\n false,\r\n '请选择有效的备份文件'\r\n );\r\n }\r\n\r\n const { files = {}, settings = {} } = backupData.data;\r\n const fileEntries = Object.entries(files);\r\n const settingEntries = Object.entries(settings);\r\n \r\n const totalFiles = fileEntries.length;\r\n const totalSettings = settingEntries.length;\r\n const totalItems = totalFiles + totalSettings;\r\n\r\n let restoredFiles = 0;\r\n let restoredSettings = 0;\r\n let failedFiles = 0;\r\n let failedSettings = 0;\r\n\r\n try {\r\n // 1. 分批恢复文件数据\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: '正在恢复文件数据...',\r\n current: 0,\r\n total: totalItems\r\n });\r\n\r\n const fileChunks = this.splitIntoChunks(fileEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < fileChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = fileChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('files', chunkData);\r\n restoredFiles += result.restoredCount;\r\n failedFiles += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: `正在恢复文件数据 ${restoredFiles}/${totalFiles}...`,\r\n current: restoredFiles,\r\n total: totalItems,\r\n percentage: (restoredFiles / totalItems) * 80\r\n });\r\n }\r\n\r\n // 2. 分批恢复系统设置\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: '正在恢复系统设置...',\r\n current: restoredFiles,\r\n total: totalItems\r\n });\r\n\r\n const settingChunks = this.splitIntoChunks(settingEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < settingChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = settingChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('settings', chunkData);\r\n restoredSettings += result.restoredCount;\r\n failedSettings += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: `正在恢复系统设置 ${restoredSettings}/${totalSettings}...`,\r\n current: restoredFiles + restoredSettings,\r\n total: totalItems,\r\n percentage: 80 + (restoredSettings / totalSettings) * 20\r\n });\r\n }\r\n\r\n // 3. 完成\r\n this.onProgress({\r\n phase: 'completed',\r\n message: '恢复完成',\r\n current: totalItems,\r\n total: totalItems,\r\n percentage: 100\r\n });\r\n\r\n return {\r\n success: true,\r\n restoredFiles,\r\n restoredSettings,\r\n failedFiles,\r\n failedSettings,\r\n backupTimestamp: backupData.timestamp\r\n };\r\n\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError\r\n ? error\r\n : new BatchOperationError(\r\n error.message || '恢复失败',\r\n 'RESTORE_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 将数组分割为多个块\r\n */\r\n splitIntoChunks(entries, chunkSize) {\r\n const chunks = [];\r\n for (let i = 0; i < entries.length; i += chunkSize) {\r\n chunks.push(entries.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n */\r\n async uploadChunkWithRetry(type, data) {\r\n let lastError;\r\n\r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(type, data);\r\n } catch (error) {\r\n lastError = error;\r\n\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' ||\r\n error.code === 'FORBIDDEN' ||\r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n\r\n if (attempt < this.maxRetries) {\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n }\r\n }\r\n }\r\n\r\n throw lastError;\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n */\r\n async uploadChunk(type, data) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/restore/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type, data })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n\r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查备份文件格式'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n}\r\n\r\nexport default RestoreProcessor;\r\n","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport packageInfo from '../../../package.json';\nimport { Doughnut, Line } from 'vue-chartjs';\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler } from 'chart.js';\nimport IndexRebuilder from '@/utils/indexRebuilder';\nimport BackupGenerator from '@/utils/backupGenerator';\nimport RestoreProcessor from '@/utils/restoreProcessor';\nimport DateRangeCalendar from '@/components/DateRangeCalendar.vue';\nChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler);\nconst DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateInput(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction getDefaultTrendDateRange() {\n const endDate = new Date();\n endDate.setHours(0, 0, 0, 0);\n const startDate = new Date(endDate.getTime() - 6 * DAY_MS);\n return [formatDateInput(startDate), formatDateInput(endDate)];\n}\nexport default {\n name: 'SysCogStatus',\n components: {\n Doughnut,\n Line,\n DateRangeCalendar\n },\n data() {\n return {\n loading: false,\n rebuilding: false,\n backing: false,\n restoring: false,\n indexInfo: {},\n indexInfoLoaded: false,\n indexInfoError: false,\n currentTime: new Date(),\n clockTimer: null,\n version: packageInfo.version,\n // 从package.json获取版本号\n loadErrors: {\n newest: false,\n oldest: false\n },\n trendGroupBy: 'channel',\n trendDatePickerVisible: false,\n trendDateRange: getDefaultTrendDateRange(),\n // 渠道图表颜色\n channelColors: ['#8B5CF6', '#EC4899', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#2563EB', '#84CC16'],\n // 状态图表颜色\n typeColors: ['#10B981', '#3B82F6', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899', '#06B6D4', '#84CC16'],\n // 上传趋势折线图颜色\n trendColors: ['#2563EB', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6', '#06B6D4', '#EC4899', '#84CC16', '#64748B'],\n // 批量操作进度状态\n isProcessing: false,\n processingPhase: '',\n // fetching, sorting, uploading, finalizing, building, downloading, completed\n processingProgress: {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n },\n processingError: null,\n processingStartTime: null,\n // 当前处理器实例(用于取消操作)\n currentRebuilder: null,\n currentBackupGenerator: null,\n currentRestoreProcessor: null\n };\n },\n computed: {\n currentLocale() {\n return String(this.$i18n.locale || 'zh-CN');\n },\n indexedFileCount() {\n return Number(this.indexInfo.totalFiles || 0);\n },\n uploadChannelCount() {\n return Object.keys(this.indexInfo.channelStats || {}).length;\n },\n systemHealthState() {\n if (this.indexInfoError) return 'attention';\n if (!this.indexInfoLoaded) return 'checking';\n return 'healthy';\n },\n systemHealthLabel() {\n return this.$t(`sysStatus.health${this.systemHealthState.charAt(0).toUpperCase()}${this.systemHealthState.slice(1)}`);\n },\n greetingTitle() {\n const hour = this.currentTime.getHours();\n if (hour < 5) return this.$t('sysStatus.greetingLateNight');\n if (hour < 11) return this.$t('sysStatus.greetingMorning');\n if (hour < 14) return this.$t('sysStatus.greetingNoon');\n if (hour < 18) return this.$t('sysStatus.greetingAfternoon');\n if (hour < 23) return this.$t('sysStatus.greetingEvening');\n return this.$t('sysStatus.greetingLateNight');\n },\n systemStatusSummary() {\n if (this.indexInfoError) return this.$t('sysStatus.summaryUnavailable');\n if (!this.indexInfoLoaded) return this.$t('sysStatus.summaryChecking');\n if (this.indexedFileCount === 0) return this.$t('sysStatus.summaryEmpty');\n if (this.uploadChannelCount === 0) {\n return this.$t('sysStatus.summaryIndexed', {\n files: this.indexedFileCount.toLocaleString(this.currentLocale)\n });\n }\n return this.$t('sysStatus.summaryHealthy', {\n files: this.indexedFileCount.toLocaleString(this.currentLocale),\n channels: this.uploadChannelCount.toLocaleString(this.currentLocale)\n });\n },\n currentDateLabel() {\n return new Intl.DateTimeFormat(this.currentLocale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n weekday: 'long'\n }).format(this.currentTime);\n },\n currentTimeLabel() {\n return new Intl.DateTimeFormat(this.currentLocale, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n }).format(this.currentTime);\n },\n timeZoneLabel() {\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || this.$t('sysStatus.localTimezone');\n const offsetMinutes = -this.currentTime.getTimezoneOffset();\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absoluteMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absoluteMinutes / 60);\n const minutes = absoluteMinutes % 60;\n const offset = minutes === 0 ? `UTC${sign}${hours}` : `UTC${sign}${hours}:${String(minutes).padStart(2, '0')}`;\n return `${timeZone} · ${offset}`;\n },\n // 渠道分布图表数据\n channelChartData() {\n const stats = this.indexInfo.channelStats || {};\n return {\n labels: Object.keys(stats),\n datasets: [{\n data: Object.values(stats),\n backgroundColor: this.channelColors.slice(0, Object.keys(stats).length),\n borderWidth: 0\n }]\n };\n },\n // 文件状态图表数据 - 将Block映射为\"已屏蔽\",其余为\"正常\"\n typeChartData() {\n const aggregatedStats = this.aggregatedTypeStats;\n return {\n labels: Object.keys(aggregatedStats),\n datasets: [{\n data: Object.values(aggregatedStats),\n backgroundColor: this.typeColors.slice(0, Object.keys(aggregatedStats).length),\n borderWidth: 0\n }]\n };\n },\n // 聚合后的状态统计:Block -> 已屏蔽,其余 -> 正常\n aggregatedTypeStats() {\n const stats = this.indexInfo.typeStats || {};\n const aggregatedStats = {};\n for (const [status, count] of Object.entries(stats)) {\n const mappedStatus = status === 'Block' ? this.$t('sysStatus.blocked') : this.$t('sysStatus.normalStatus');\n aggregatedStats[mappedStatus] = (aggregatedStats[mappedStatus] || 0) + count;\n }\n return aggregatedStats;\n },\n // 当前趋势维度数据\n currentTrendGroup() {\n const trend = this.indexInfo.uploadTrend || {};\n const groupBy = trend.groupBy || {};\n return groupBy[this.trendGroupBy] || {\n series: []\n };\n },\n // 趋势图原始日期标签\n trendRawLabels() {\n const trend = this.indexInfo.uploadTrend || {};\n return trend.labels || [];\n },\n // 当前范围是否跨年\n trendRangeCrossesYear() {\n const years = new Set();\n this.trendRawLabels.forEach(label => {\n this.extractTrendLabelDates(label).forEach(date => years.add(date.year));\n });\n return years.size > 1;\n },\n // 用于横轴展示的短日期标签\n trendDisplayLabels() {\n return this.trendRawLabels.map(label => this.formatTrendAxisLabel(label));\n },\n // 是否存在趋势图数据\n hasTrendData() {\n const trend = this.indexInfo.uploadTrend || {};\n return (trend.labels || []).length > 0;\n },\n // 日期选择弹窗宽度保持与项目内其他弹窗一致\n trendDateDialogWidth() {\n return window.innerWidth > 768 ? '420px' : '90%';\n },\n // 上传趋势折线图数据\n uploadTrendChartData() {\n const trend = this.indexInfo.uploadTrend || {};\n const series = this.currentTrendGroup.series || [];\n const totalColor = '#F97316';\n return {\n labels: this.trendDisplayLabels,\n datasets: [{\n label: this.$t('sysStatus.totalUploads'),\n data: trend.total || [],\n borderColor: totalColor,\n backgroundColor: this.hexToRgba(totalColor, 0.1),\n pointBackgroundColor: totalColor,\n pointBorderColor: totalColor,\n borderWidth: 3,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.28,\n fill: false\n }, ...series.map((item, index) => {\n const color = this.getTrendColor(index);\n return {\n label: this.formatTrendSeriesName(item),\n data: item.data || [],\n borderColor: color,\n backgroundColor: this.hexToRgba(color, 0.12),\n pointBackgroundColor: color,\n pointBorderColor: color,\n borderWidth: 2,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.32,\n fill: false\n };\n })]\n };\n },\n // 折线图配置\n lineChartOptions() {\n const textColor = '#64748B';\n return {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n mode: 'index',\n intersect: false\n },\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n padding: 16,\n color: textColor\n }\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n callbacks: {\n title: items => {\n const index = items?.[0]?.dataIndex;\n return this.trendRawLabels[index] || '';\n },\n label: context => {\n const parsed = context.parsed || {};\n const value = parsed.y !== undefined ? parsed.y : context.raw;\n return ` ${context.dataset.label}: ${Number(value || 0).toLocaleString()} ${this.$t('sysStatus.uploadsUnit')}`;\n }\n }\n }\n },\n scales: {\n x: {\n grid: {\n display: false\n },\n ticks: {\n color: textColor,\n maxTicksLimit: 8,\n autoSkip: true\n }\n },\n y: {\n beginAtZero: true,\n grid: {\n color: 'rgba(148, 163, 184, 0.18)'\n },\n ticks: {\n color: textColor,\n precision: 0,\n callback: value => Number(value).toLocaleString()\n }\n }\n }\n };\n },\n // 图表配置\n chartOptions() {\n return {\n responsive: true,\n maintainAspectRatio: true,\n cutout: '65%',\n hoverOffset: 8,\n layout: {\n padding: 10\n },\n plugins: {\n legend: {\n display: false\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n z: 100,\n callbacks: {\n label: context => {\n const value = context.raw;\n const total = context.dataset.data.reduce((a, b) => a + b, 0);\n const percentage = (value / total * 100).toFixed(1);\n return ` ${value.toLocaleString()} (${percentage}%)`;\n }\n }\n }\n },\n animation: {\n animateRotate: true,\n animateScale: true\n }\n };\n },\n // 预计剩余时间\n estimatedTimeRemaining() {\n if (!this.isProcessing || !this.processingStartTime) return '';\n if (this.processingProgress.current === 0 || this.processingProgress.percentage === 0) return '';\n const elapsed = Date.now() - this.processingStartTime;\n const progress = this.processingProgress.percentage / 100;\n if (progress <= 0) return '';\n const totalEstimated = elapsed / progress;\n const remaining = totalEstimated - elapsed;\n if (remaining <= 0) return this.$t('sysStatus.aboutToComplete');\n const seconds = Math.ceil(remaining / 1000);\n if (seconds < 60) return this.$t('sysStatus.seconds', {\n count: seconds\n });\n const minutes = Math.ceil(seconds / 60);\n if (minutes < 60) return this.$t('sysStatus.minutes', {\n count: minutes\n });\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return this.$t('sysStatus.hoursMinutes', {\n hours,\n minutes: remainingMinutes\n });\n },\n // 处理阶段描述\n phaseDescription() {\n const phaseMap = {\n 'fetching': this.$t('sysStatus.phaseFetching'),\n 'sorting': this.$t('sysStatus.phaseSorting'),\n 'uploading': this.$t('sysStatus.phaseUploading'),\n 'finalizing': this.$t('sysStatus.phaseFinalizing'),\n 'building': this.$t('sysStatus.phaseBuilding'),\n 'downloading': this.$t('sysStatus.phaseDownloading'),\n 'restoring_files': this.$t('sysStatus.phaseRestoringFiles'),\n 'restoring_settings': this.$t('sysStatus.phaseRestoringSettings'),\n 'completed': this.$t('sysStatus.phaseCompleted'),\n 'retrying': this.$t('sysStatus.phaseRetrying')\n };\n return phaseMap[this.processingPhase] || this.processingPhase;\n }\n },\n mounted() {\n this.fetchIndexInfo();\n this.clockTimer = window.setInterval(() => {\n this.currentTime = new Date();\n }, 1000);\n },\n beforeUnmount() {\n if (this.clockTimer) {\n window.clearInterval(this.clockTimer);\n this.clockTimer = null;\n }\n },\n methods: {\n // 获取渠道图表颜色\n getChartColor(index) {\n return this.channelColors[index % this.channelColors.length];\n },\n // 获取状态图表颜色\n getTypeChartColor(index) {\n return this.typeColors[index % this.typeColors.length];\n },\n // 获取趋势图表颜色\n getTrendColor(index) {\n return this.trendColors[index % this.trendColors.length];\n },\n // 格式化趋势序列名称\n formatTrendSeriesName(series) {\n if (series?.isOther || series?.name === '__other__') {\n return this.$t('sysStatus.otherChannels');\n }\n return series?.name || this.$t('sysStatus.unknown');\n },\n // 十六进制颜色转换为 rgba\n hexToRgba(hex, alpha) {\n const normalized = (hex || '').replace('#', '');\n if (normalized.length !== 6) {\n return `rgba(37, 99, 235, ${alpha})`;\n }\n const r = parseInt(normalized.slice(0, 2), 16);\n const g = parseInt(normalized.slice(2, 4), 16);\n const b = parseInt(normalized.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n },\n // 提取趋势标签中的日期\n extractTrendLabelDates(label) {\n const matches = String(label || '').match(/\\d{4}-\\d{2}-\\d{2}/g) || [];\n return matches.map(item => {\n const [year, month, day] = item.split('-').map(Number);\n return {\n year,\n month,\n day\n };\n });\n },\n // 横轴日期标签按范围简化,仅跨年时显示年份\n formatTrendAxisLabel(label) {\n const dates = this.extractTrendLabelDates(label);\n if (dates.length === 0) return label;\n const formatSingleDate = (date, includeYear) => {\n const monthDay = `${date.month}/${date.day}`;\n return includeYear ? `${date.year}/${monthDay}` : monthDay;\n };\n if (dates.length === 1) {\n return formatSingleDate(dates[0], this.trendRangeCrossesYear);\n }\n const [startDate, endDate] = dates;\n if (!this.trendRangeCrossesYear) {\n return `${formatSingleDate(startDate, false)}-${formatSingleDate(endDate, false)}`;\n }\n const endLabel = startDate.year === endDate.year ? formatSingleDate(endDate, false) : formatSingleDate(endDate, true);\n return `${formatSingleDate(startDate, true)}-${endLabel}`;\n },\n // 打开居中的日期范围选择弹窗\n openTrendDateDialog() {\n this.trendDatePickerVisible = true;\n },\n // 日期范围变更后重新拉取趋势数据\n handleTrendDateRangeChange(value) {\n if (!Array.isArray(value) || value.length !== 2 || !value[0] || !value[1]) {\n return;\n }\n this.trendDatePickerVisible = false;\n this.fetchIndexInfo();\n },\n // 获取趋势查询参数\n getTrendDateRangeParams() {\n if (!Array.isArray(this.trendDateRange) || this.trendDateRange.length !== 2) {\n this.trendDateRange = getDefaultTrendDateRange();\n }\n return {\n startDate: this.trendDateRange[0],\n endDate: this.trendDateRange[1]\n };\n },\n // 获取索引信息\n async fetchIndexInfo() {\n this.loading = true;\n this.indexInfoError = false;\n try {\n const {\n startDate,\n endDate\n } = this.getTrendDateRangeParams();\n const params = new URLSearchParams({\n action: 'info',\n timezoneOffset: String(new Date().getTimezoneOffset()),\n trendMaxPoints: '90',\n trendSeriesLimit: '8',\n trendStartDate: startDate,\n trendEndDate: endDate\n });\n const response = await fetchWithAuth(`/api/manage/list?${params.toString()}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.indexInfo = data;\n this.indexInfoLoaded = true;\n } else {\n throw new Error('API请求失败');\n }\n } catch (error) {\n console.error('获取索引信息失败:', error);\n this.indexInfoError = true;\n this.$message.error(this.$t('sysStatus.fetchIndexFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 重建索引 - 使用前端辅助重建流程\n async rebuildIndex() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.rebuilding = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 IndexRebuilder 实例\n this.currentRebuilder = new IndexRebuilder({\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n try {\n const result = await this.currentRebuilder.rebuild();\n\n // 成功完成\n this.$message.success(this.$t('sysStatus.rebuildSuccess', {\n count: result.totalFiles.toLocaleString()\n }));\n\n // 刷新索引信息\n setTimeout(() => {\n this.fetchIndexInfo();\n }, 1000);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.rebuilding = false;\n this.isProcessing = false;\n this.currentRebuilder = null;\n this.processingStartTime = null;\n }\n },\n // 备份数据 - 使用前端辅助备份流程\n async backupData() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.backing = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 BackupGenerator 实例\n this.currentBackupGenerator = new BackupGenerator({\n onProgress: progress => this.handleProgress(progress)\n });\n try {\n const result = await this.currentBackupGenerator.generateBackup();\n\n // 成功完成\n const settingsMsg = result.settingsCount > 0 ? this.$t('sysStatus.backupSuccessWithSettings', {\n fileCount: result.fileCount.toLocaleString(),\n settingsCount: result.settingsCount\n }) : this.$t('sysStatus.backupSuccess', {\n count: result.fileCount.toLocaleString()\n });\n this.$message.success(settingsMsg);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.backing = false;\n this.isProcessing = false;\n this.currentBackupGenerator = null;\n this.processingStartTime = null;\n }\n },\n // 选择恢复文件\n selectRestoreFile() {\n if (this.restoring) return;\n this.$refs.fileInput.click();\n },\n // 处理文件选择\n async handleFileSelect(event) {\n const file = event.target.files[0];\n if (!file) return;\n if (!file.name.endsWith('.json')) {\n this.$message.error(this.$t('sysStatus.selectJsonFile'));\n return;\n }\n\n // 确认恢复操作\n try {\n await this.$confirm(this.$t('sysStatus.restoreConfirmMessage'), this.$t('sysStatus.restoreConfirmTitle'), {\n confirmButtonText: this.$t('sysStatus.restoreConfirmOk'),\n cancelButtonText: this.$t('sysStatus.restoreConfirmCancel'),\n type: 'warning'\n });\n await this.restoreData(file);\n } catch (error) {\n if (error !== 'cancel') {\n console.error('确认恢复失败:', error);\n }\n }\n\n // 清除文件选择\n event.target.value = '';\n },\n // 恢复数据 - 使用前端辅助分批恢复流程\n async restoreData(file) {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.restoring = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n try {\n // 解析备份文件\n const fileContent = await file.text();\n let backupData;\n try {\n backupData = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(this.$t('sysStatus.invalidBackupFile'));\n }\n\n // 创建 RestoreProcessor 实例\n this.currentRestoreProcessor = new RestoreProcessor({\n chunkSize: 100,\n // 每批恢复 100 条\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n const result = await this.currentRestoreProcessor.restore(backupData);\n\n // 恢复完成,重置恢复状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n\n // 显示恢复成功消息\n this.$message.success(this.$t('sysStatus.restoreSuccess', {\n files: result.restoredFiles,\n settings: result.restoredSettings\n }));\n\n // 短暂延迟后自动开始重建索引\n await new Promise(resolve => setTimeout(resolve, 500));\n await this.rebuildIndex();\n } catch (error) {\n console.error('恢复数据失败:', error);\n\n // 出错时重置状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(this.$t('sysStatus.restoreFailed') + ': ' + errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n }\n },\n // 格式化时间\n formatTime(timestamp) {\n if (!timestamp) return this.$t('sysStatus.unknown');\n const date = new Date(timestamp);\n return date.toLocaleString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n });\n },\n // 计算百分比\n getPercentage(value, total) {\n if (!total || total === 0) return 0;\n return Math.round(value / total * 100);\n },\n // 计算时间差\n getTimeAgo(timestamp) {\n if (!timestamp) return '';\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n if (days > 0) return this.$t('sysStatus.daysAgo', {\n count: days\n });\n if (hours > 0) return this.$t('sysStatus.hoursAgo', {\n count: hours\n });\n if (minutes > 0) return this.$t('sysStatus.minutesAgo', {\n count: minutes\n });\n return this.$t('sysStatus.justNow');\n },\n // 图片加载失败处理\n handleImageError(type) {\n this.loadErrors[type] = true;\n },\n // 检查是否应该显示预览图\n isValidPreview(type, file) {\n if (this.loadErrors[type]) return false;\n if (!file?.metadata?.FileType) return false;\n return file.metadata.FileType.includes('image') || file.metadata.FileType.includes('video');\n },\n // 打开发布页面\n openReleases() {\n window.open('https://github.com/MarSeventh/CloudFlare-ImgBed/releases', '_blank');\n },\n // 判断是否为图片文件\n isImageFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('image')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'avif', 'heic', 'heif'];\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频文件\n isVideoFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('video')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'm4v', '3gp', 'mpeg', 'mpg'];\n return videoExtensions.includes(extension);\n },\n // 在新窗口打开文件\n openFileInNewTab(file) {\n if (!file?.id) return;\n window.open('/file/' + file.id + '?from=admin', '_blank');\n },\n // 处理进度更新\n handleProgress(progress) {\n this.processingPhase = progress.phase;\n this.processingProgress.message = progress.message || '';\n this.processingProgress.current = progress.current || 0;\n\n // 根据不同阶段计算进度百分比\n if (progress.phase === 'fetching') {\n // 获取阶段:基于已获取的记录数估算(假设总数未知时显示已获取数量)\n this.processingProgress.total = progress.total || 0;\n // 获取阶段占总进度的 60%\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = Math.min(60, progress.current / progress.total * 60);\n } else {\n // 未知总数时,使用对数增长模拟进度\n this.processingProgress.percentage = Math.min(50, Math.log10(progress.current + 1) * 15);\n }\n } else if (progress.phase === 'sorting') {\n // 排序阶段:占 60-70%\n this.processingProgress.percentage = 65;\n this.processingProgress.total = progress.total || this.processingProgress.total;\n } else if (progress.phase === 'uploading') {\n // 上传阶段:占 70-95%\n this.processingProgress.total = progress.total || 0;\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = 70 + progress.current / progress.total * 25;\n }\n } else if (progress.phase === 'finalizing') {\n // 完成阶段:95-100%\n this.processingProgress.percentage = 97;\n } else if (progress.phase === 'building') {\n // 构建备份阶段:70-90%\n this.processingProgress.percentage = 80;\n } else if (progress.phase === 'downloading') {\n // 下载阶段:90-100%\n this.processingProgress.percentage = 95;\n } else if (progress.phase === 'restoring_files') {\n // 恢复文件阶段:0-80%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 0;\n } else if (progress.phase === 'restoring_settings') {\n // 恢复设置阶段:80-100%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 80;\n } else if (progress.phase === 'completed') {\n // 完成\n this.processingProgress.percentage = 100;\n } else if (progress.phase === 'retrying') {\n // 重试阶段:保持当前进度\n this.processingProgress.message = progress.message;\n }\n },\n // 处理错误\n handleError(error) {\n console.error('批量操作错误:', error);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n },\n // 取消当前操作\n cancelOperation() {\n if (this.currentRebuilder) {\n this.currentRebuilder.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentBackupGenerator) {\n this.currentBackupGenerator.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentRestoreProcessor) {\n this.currentRestoreProcessor.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n },\n // 重试操作\n retryOperation() {\n this.processingError = null;\n if (this.rebuilding) {\n this.rebuilding = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.rebuildIndex();\n });\n } else if (this.backing) {\n this.backing = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.backupData();\n });\n }\n },\n // 关闭错误提示\n dismissError() {\n this.processingError = null;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogStatus.vue?vue&type=template&id=776bcef4&scoped=true\"\nimport script from \"./SysCogStatus.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogStatus.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogStatus.vue?vue&type=style&index=0&id=776bcef4&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-776bcef4\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withModifiers as _withModifiers, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"custom-select\", {\n 'is-open': $data.isOpen\n }]),\n style: _normalizeStyle({\n width: $props.width\n })\n }, [_createElementVNode(\"div\", {\n class: \"custom-select-trigger\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleDropdown && $options.toggleDropdown(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-select-value\", {\n 'is-placeholder': !$props.modelValue\n }])\n }, _toDisplayString($options.displayLabel), 3), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"custom-select-arrow\"\n })]), _createVNode(_Transition, {\n name: \"dropdown-fade\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: \"custom-select-dropdown\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.options, option => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: option.value,\n class: _normalizeClass([\"custom-select-option\", {\n 'is-selected': $props.modelValue === option.value\n }]),\n onClick: $event => $options.selectOption(option.value)\n }, [_renderSlot(_ctx.$slots, \"option\", {\n option: option\n }, () => [option.channelType ? (_openBlock(), _createBlock(_component_ChannelIcon, {\n key: 0,\n type: option.channelType,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"type\", \"class\"])) : option.icon ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: option.icon,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"icon\", \"class\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"span\", null, _toDisplayString(option.label), 1)], true)], 10, _hoisted_1);\n }), 128))], 512), [[_vShow, $data.isOpen]])]),\n _: 3\n })], 6);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'CustomSelect',\n components: {\n ChannelIcon\n },\n props: {\n modelValue: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n required: true\n // 格式: [{ value: '', label: '', icon?: '', iconClass?: '', channelType?: '' }]\n },\n placeholder: {\n type: String,\n default: ''\n },\n width: {\n type: String,\n default: '160px'\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n return {\n isOpen: false\n };\n },\n computed: {\n resolvedPlaceholder() {\n return this.placeholder || this.$t('common.select');\n },\n displayLabel() {\n const selected = this.options.find(opt => opt.value === this.modelValue);\n return selected ? selected.label : this.resolvedPlaceholder;\n }\n },\n mounted() {\n document.addEventListener('click', this.handleClickOutside);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleClickOutside);\n },\n methods: {\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n },\n selectOption(value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', value);\n this.isOpen = false;\n },\n handleClickOutside(e) {\n if (!this.$el.contains(e.target)) {\n this.isOpen = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomSelect.vue?vue&type=template&id=09c823d4&scoped=true\"\nimport script from \"./CustomSelect.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSelect.vue?vue&type=script&lang=js\"\n\nimport \"./CustomSelect.vue?vue&type=style&index=0&id=09c823d4&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-09c823d4\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-settings\"\n};\nconst _hoisted_2 = {\n class: \"page-header\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"header-actions\"\n};\nconst _hoisted_5 = {\n class: \"group-header\"\n};\nconst _hoisted_6 = {\n class: \"group-title\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"load-balance-switch\"\n};\nconst _hoisted_8 = {\n class: \"switch-label\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"channel-cards\"\n};\nconst _hoisted_10 = [\"onMousemove\", \"onMouseleave\"];\nconst _hoisted_11 = {\n class: \"card-header\"\n};\nconst _hoisted_12 = {\n class: \"card-title\"\n};\nconst _hoisted_13 = {\n class: \"channel-name\"\n};\nconst _hoisted_14 = {\n class: \"card-body\"\n};\nconst _hoisted_15 = {\n class: \"card-info\"\n};\nconst _hoisted_16 = {\n class: \"info-item\"\n};\nconst _hoisted_17 = {\n class: \"info-text\"\n};\nconst _hoisted_18 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_19 = {\n class: \"info-text\"\n};\nconst _hoisted_20 = {\n key: 1,\n class: \"info-item\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n class: \"info-item\"\n};\nconst _hoisted_23 = {\n class: \"info-text\"\n};\nconst _hoisted_24 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_25 = [\"title\"];\nconst _hoisted_26 = {\n class: \"info-item\"\n};\nconst _hoisted_27 = {\n class: \"info-text\"\n};\nconst _hoisted_28 = {\n class: \"info-item\"\n};\nconst _hoisted_29 = {\n class: \"info-text\"\n};\nconst _hoisted_30 = {\n class: \"info-item\"\n};\nconst _hoisted_31 = {\n class: \"info-text\"\n};\nconst _hoisted_32 = {\n class: \"info-item\"\n};\nconst _hoisted_33 = [\"title\"];\nconst _hoisted_34 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_35 = [\"title\"];\nconst _hoisted_36 = {\n key: 0,\n class: \"quota-mini\"\n};\nconst _hoisted_37 = {\n class: \"quota-text\"\n};\nconst _hoisted_38 = {\n class: \"card-actions\"\n};\nconst _hoisted_39 = {\n key: 1,\n class: \"empty-tip\"\n};\nconst _hoisted_40 = {\n class: \"channel-type-option\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"form-warning\",\n style: {\n \"margin-top\": \"0\"\n }\n};\nconst _hoisted_42 = [\"innerHTML\"];\nconst _hoisted_43 = {\n class: \"form-warning\"\n};\nconst _hoisted_44 = {\n class: \"quota-label\"\n};\nconst _hoisted_45 = {\n class: \"quota-status\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_CustomSelect = _resolveComponent(\"CustomSelect\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.title')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.titleTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_CustomSelect, {\n modelValue: $data.channelFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelFilter = $event),\n options: $options.filterOptions,\n placeholder: _ctx.$t('sysUpload.filterPlaceholder'),\n width: \"160px\"\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => $data.showAddDialog = true),\n class: \"add-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.addChannel')), 1)]),\n _: 1\n })])]), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.filteredChannels, channelType => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channelType.value,\n class: \"channel-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_ChannelIcon, {\n type: channelType.value,\n class: \"group-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(channelType.label), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n class: \"channel-count\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelList(channelType.value).length), 1)]),\n _: 2\n }, 1024)]), $options.hasLoadBalance(channelType.value) ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('sysUpload.loadBalance')), 1), _createVNode(_component_el_switch, {\n modelValue: $options.getSettings(channelType.value).loadBalance.enabled,\n \"onUpdate:modelValue\": $event => $options.getSettings(channelType.value).loadBalance.enabled = $event,\n size: \"small\",\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])])) : _createCommentVNode(\"\", true)]), $options.getChannelList(channelType.value).length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.getChannelList(channelType.value), (channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel.name || index,\n class: _normalizeClass([\"channel-card\", [channelType.value, {\n 'disabled': !channel.enabled,\n 'fixed': channel.fixed\n }]]),\n onMousemove: $event => $options.handleCardMouseMove($event, channelType.value, index),\n onMouseleave: $event => $options.handleCardMouseLeave(channelType.value, index)\n }, [_createElementVNode(\"div\", {\n class: \"card-glow\",\n ref_for: true,\n ref: `glow-${channelType.value}-${index}`\n }, null, 512), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(channel.name || _ctx.$t('sysUpload.unnamedChannel')), 1), channel.fixed ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_switch, {\n modelValue: channel.enabled,\n \"onUpdate:modelValue\": $event => channel.enabled = $event,\n size: \"small\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [channelType.value === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_17, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), channel.chatId ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [_createVNode(_component_font_awesome_icon, {\n icon: \"comments\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, \"Channel: \" + _toDisplayString($options.maskText(channel.chatId)), 1)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_21)])) : channelType.value === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"server\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_23, _toDisplayString(channel.bucketName || _ctx.$t('sysUpload.notSet')), 1)]), channel.endpoint ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.endpoint\n }, _toDisplayString(channel.endpoint), 9, _hoisted_25)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_27, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_29, \"Channel: \" + _toDisplayString($options.maskText(channel.channelId)), 1)]), channel.isNitro ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"success\"\n }, {\n default: _withCtx(() => [...(_cache[78] || (_cache[78] = [_createTextVNode(\"Nitro\", -1)]))]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(channel.repo || _ctx.$t('sysUpload.notSet')), 1)]), channel.isPrivate ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.baseUrl\n }, _toDisplayString(channel.baseUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_33)]), channel.publicUrl ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl), 9, _hoisted_35)])) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]), channel.quota?.enabled ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage(channel),\n status: $options.getQuotaStatus(channel),\n \"stroke-width\": 6\n }, null, 8, [\"percentage\", \"status\"]), _createElementVNode(\"span\", _hoisted_37, _toDisplayString($options.getQuotaText(channel)), 1)])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_38, [_createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openDetailDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"eye\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.detail')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openEditDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"danger\",\n size: \"small\",\n onClick: $event => $options.deleteChannel(channelType.value, index),\n disabled: channel.fixed\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])], 42, _hoisted_10);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\",\n class: \"empty-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysUpload.noChannels', {\n type: channelType.label\n })), 1)]))]);\n }), 128)), _createVNode(_component_el_dialog, {\n modelValue: $data.showAddDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showAddDialog = $event),\n title: _ctx.$t('sysUpload.addDialogTitle'),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetAddForm\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showAddDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), $data.newChannel.type !== 'cfr2' ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.confirmAddChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.confirmAdd')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newChannel,\n \"label-position\": \"top\",\n ref: \"addForm\",\n rules: $options.addRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelTypeLabel'),\n prop: \"type\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.newChannel.type,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.newChannel.type = $event),\n placeholder: _ctx.$t('sysUpload.channelTypePlaceholder'),\n style: {\n \"width\": \"100%\"\n },\n onChange: $options.onChannelTypeChange\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.addableChannels, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.value,\n label: ch.label,\n value: ch.value\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_40, [_createVNode(_component_ChannelIcon, {\n type: ch.value,\n class: \"select-option-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(ch.label), 1)])]),\n _: 2\n }, 1032, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.type === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sysUpload.r2ConfigNote')\n }, null, 8, _hoisted_42)])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameImmutableTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.name,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.newChannel.name = $event),\n placeholder: _ctx.$t('sysUpload.channelNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), $data.newChannel.type === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.chatId,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.newChannel.chatId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.chatIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.newChannel.type === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.endpoint,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.newChannel.endpoint = $event),\n placeholder: _ctx.$t('sysUpload.endpointPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.newChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.bucketName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.newChannel.bucketName = $event),\n placeholder: _ctx.$t('sysUpload.bucketNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.region,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.newChannel.region = $event),\n placeholder: _ctx.$t('sysUpload.bucketRegionPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.newChannel.accessKeyId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessKeyIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.newChannel.secretAccessKey = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.secretAccessKeyPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.newChannel.pathStyle = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.newChannel.type === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.channelId,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.newChannel.channelId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.channelIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isNitro,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_43, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.discordWarning')), 1)])], 64)) : $data.newChannel.type === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.repo,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newChannel.repo = $event),\n placeholder: _ctx.$t('sysUpload.repoNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.token,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newChannel.token = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.newChannel.type === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newChannel.baseUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavBaseUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.username,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newChannel.username = $event),\n placeholder: _ctx.$t('sysUpload.webdavUsernamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.password,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newChannel.password = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.webdavPasswordPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.newChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.headersText,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.newChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.newChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)], 64))]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showDetailDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showDetailDialog = $event),\n title: _ctx.$t('sysUpload.detailDialogTitle', {\n name: $data.currentChannel?.name || ''\n }),\n class: \"channel-dialog\",\n onClosed: $options.resetDetailData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showDetailDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.closeBtn')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.openEditFromDetail\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_descriptions, {\n column: 1,\n border: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelNameDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelTypeDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelTypeLabel($data.currentChannelType)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.statusLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: $data.currentChannel?.enabled ? 'success' : 'info'\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.enabled ? _ctx.$t('sysUpload.enabled') : _ctx.$t('sysUpload.disabled')), 1)]),\n _: 1\n }, 8, [\"type\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannel?.fixed ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 0,\n label: _ctx.$t('sysUpload.configSource')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.chatIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.chatId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 2,\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"])) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.endpointLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.endpoint,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.cdnDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.cdnDomain || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.bucketName), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketRegion')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.region), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.pathStyle')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.pathStyle ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.channelId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.nitroMember')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isNitro ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.repoName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.repo), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.privateRepo')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isPrivate ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 6\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.baseUrl,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.username || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $options.formatHeaders($data.currentChannel?.headers),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavCreateDirectory')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.createDirectory !== false ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true), $data.currentChannel?.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 7\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.limitGB) + \" GB\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.threshold) + \"%\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, null, {\n label: _withCtx(() => [_createElementVNode(\"span\", _hoisted_44, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.currentUsage')) + \" \", 1), _createVNode(_component_el_button, {\n link: \"\",\n type: \"primary\",\n onClick: $options.refreshQuota,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\",\n class: _normalizeClass({\n 'fa-spin': $data.quotaLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage($data.currentChannel),\n status: $options.getQuotaStatus($data.currentChannel),\n \"stroke-width\": 16,\n \"text-inside\": true,\n format: () => $options.getQuotaText($data.currentChannel)\n }, null, 8, [\"percentage\", \"status\", \"format\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quota-info\", {\n 'quota-warning': $options.isQuotaExceeded($data.currentChannel)\n }])\n }, _toDisplayString($options.getQuotaStatusText($data.currentChannel)), 3)])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditDialog,\n \"onUpdate:modelValue\": _cache[77] || (_cache[77] = $event => $data.showEditDialog = $event),\n title: _ctx.$t('sysUpload.editDialogTitle', {\n name: $data.editChannel?.name || ''\n }),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetEditData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[76] || (_cache[76] = $event => $data.showEditDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.confirmEditChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.saveChanges')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editChannel,\n \"label-position\": \"top\",\n ref: \"editForm\",\n rules: $options.editRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameEditDisabledTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.name,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.editChannel.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.enableChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.enabled,\n \"onUpdate:modelValue\": _cache[39] || (_cache[39] = $event => $data.editChannel.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.chatId,\n \"onUpdate:modelValue\": _cache[41] || (_cache[41] = $event => $data.editChannel.chatId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[42] || (_cache[42] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[43] || (_cache[43] = $event => $data.editChannel.publicUrl = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[44] || (_cache[44] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[45] || (_cache[45] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[46] || (_cache[46] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[47] || (_cache[47] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.endpoint,\n \"onUpdate:modelValue\": _cache[48] || (_cache[48] = $event => $data.editChannel.endpoint = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[49] || (_cache[49] = $event => $data.editChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.bucketName,\n \"onUpdate:modelValue\": _cache[50] || (_cache[50] = $event => $data.editChannel.bucketName = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.region,\n \"onUpdate:modelValue\": _cache[51] || (_cache[51] = $event => $data.editChannel.region = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[52] || (_cache[52] = $event => $data.editChannel.accessKeyId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[53] || (_cache[53] = $event => $data.editChannel.secretAccessKey = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[54] || (_cache[54] = $event => $data.editChannel.pathStyle = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[55] || (_cache[55] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[56] || (_cache[56] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[57] || (_cache[57] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[58] || (_cache[58] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[59] || (_cache[59] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.channelId,\n \"onUpdate:modelValue\": _cache[60] || (_cache[60] = $event => $data.editChannel.channelId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[61] || (_cache[61] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isNitro,\n \"onUpdate:modelValue\": _cache[62] || (_cache[62] = $event => $data.editChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.repo,\n \"onUpdate:modelValue\": _cache[63] || (_cache[63] = $event => $data.editChannel.repo = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.token,\n \"onUpdate:modelValue\": _cache[64] || (_cache[64] = $event => $data.editChannel.token = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[65] || (_cache[65] = $event => $data.editChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[66] || (_cache[66] = $event => $data.editChannel.baseUrl = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.username,\n \"onUpdate:modelValue\": _cache[67] || (_cache[67] = $event => $data.editChannel.username = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.password,\n \"onUpdate:modelValue\": _cache[68] || (_cache[68] = $event => $data.editChannel.password = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[69] || (_cache[69] = $event => $data.editChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.headersText,\n \"onUpdate:modelValue\": _cache[70] || (_cache[70] = $event => $data.editChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[71] || (_cache[71] = $event => $data.editChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[72] || (_cache[72] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[73] || (_cache[73] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[74] || (_cache[74] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[75] || (_cache[75] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nimport CustomSelect from './CustomSelect.vue';\nexport default {\n components: {\n ChannelIcon,\n CustomSelect\n },\n data() {\n return {\n // 渠道类型筛选\n channelFilter: '',\n // 渠道类型列表\n channels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 可添加的渠道类型\n addableChannels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 各渠道配置\n telegramSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n cfr2Settings: {\n channels: []\n },\n s3Settings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n discordSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n huggingfaceSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n webdavSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n // 弹窗控制\n showAddDialog: false,\n showDetailDialog: false,\n showEditDialog: false,\n // 当前操作的渠道\n currentChannelType: '',\n currentChannelIndex: -1,\n currentChannel: null,\n editChannel: {},\n // 新增渠道表单\n newChannel: {\n type: '',\n name: '',\n enabled: true,\n // Telegram\n botToken: '',\n chatId: '',\n proxyUrl: '',\n // S3\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n // Discord\n channelId: '',\n isNitro: false,\n // HuggingFace\n repo: '',\n token: '',\n isPrivate: false,\n // WebDAV\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n },\n // 容量统计数据\n quotaStats: {},\n quotaLoading: false,\n // 加载状态\n loading: false\n };\n },\n computed: {\n // 筛选下拉框选项\n filterOptions() {\n return [{\n value: '',\n label: this.$t('common.all')\n }, ...this.channels.map(ch => ({\n value: ch.value,\n label: ch.label,\n channelType: ch.value\n }))];\n },\n // 根据筛选条件过滤渠道类型\n filteredChannels() {\n if (!this.channelFilter) {\n return this.channels;\n }\n return this.channels.filter(ch => ch.value === this.channelFilter);\n },\n addRules() {\n return {\n type: [{\n required: true,\n message: this.$t('sysUpload.channelTypePlaceholder'),\n trigger: 'change'\n }],\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n },\n editRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n // 卡片光斑跟随鼠标\n handleCardMouseMove(event, channelType, index) {\n const card = event.currentTarget;\n const rect = card.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '1';\n glowEl[0].style.left = `${x}px`;\n glowEl[0].style.top = `${y}px`;\n }\n },\n handleCardMouseLeave(channelType, index) {\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '0';\n }\n },\n // 获取渠道类型标签\n getChannelTypeLabel(type) {\n const channel = this.channels.find(c => c.value === type);\n return channel ? channel.label : type;\n },\n // 获取渠道列表\n getChannelList(type) {\n return this.getSettings(type)?.channels || [];\n },\n // 获取渠道设置对象\n getSettings(type) {\n const map = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n return map[type];\n },\n // 是否有负载均衡选项\n hasLoadBalance(type) {\n return ['telegram', 's3', 'discord', 'huggingface', 'webdav'].includes(type);\n },\n // 文本脱敏\n maskText(text, showLength = 4) {\n if (!text) return this.$t('sysUpload.notSet');\n if (text.length <= showLength * 2) return '****';\n return text.slice(0, showLength) + '****' + text.slice(-showLength);\n },\n formatHeaders(headers) {\n if (!headers || typeof headers === 'object' && Object.keys(headers).length === 0) {\n return this.$t('sysUpload.notSet');\n }\n if (typeof headers === 'string') {\n return headers;\n }\n return JSON.stringify(headers, null, 2);\n },\n headersToText(headers) {\n if (!headers) return '';\n if (typeof headers === 'string') return headers;\n return JSON.stringify(headers, null, 2);\n },\n parseHeadersText(text) {\n if (!text || !text.trim()) return {};\n try {\n const parsed = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed;\n } catch (error) {\n return null;\n }\n },\n // 打开详情弹窗\n openDetailDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n this.currentChannel = this.getChannelList(type)[index];\n this.showDetailDialog = true;\n },\n // 打开编辑弹窗\n openEditDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n const channel = this.getChannelList(type)[index];\n this.editChannel = JSON.parse(JSON.stringify(channel));\n if (type === 'webdav') {\n this.editChannel.headersText = this.headersToText(this.editChannel.headers);\n this.editChannel.createDirectory = this.editChannel.createDirectory !== false;\n }\n // 确保 quota 对象存在\n if (!this.editChannel.quota) {\n this.editChannel.quota = {\n enabled: false,\n limitGB: 10,\n threshold: 95\n };\n }\n this.showEditDialog = true;\n },\n // 从详情页打开编辑\n openEditFromDetail() {\n this.showDetailDialog = false;\n this.openEditDialog(this.currentChannelType, this.currentChannelIndex);\n },\n // 重置添加表单\n resetAddForm() {\n this.newChannel = {\n type: '',\n name: '',\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 重置详情弹窗数据\n resetDetailData() {\n this.currentChannel = null;\n },\n // 重置编辑弹窗数据\n resetEditData() {\n this.editChannel = {};\n },\n // 渠道类型变更时重置表单\n onChannelTypeChange() {\n // 保留 type 和 name,重置其他字段\n const {\n type,\n name\n } = this.newChannel;\n this.newChannel = {\n type,\n name,\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 确认添加渠道\n confirmAddChannel() {\n this.$refs.addForm.validate(valid => {\n if (!valid) return;\n const {\n type,\n name\n } = this.newChannel;\n const settings = this.getSettings(type);\n\n // 检查是否为保留名称({type}_env)\n const reservedNames = ['Telegram_env', 'R2_env', 'S3_env', 'Discord_env', 'HuggingFace_env', 'WebDAV_env'];\n if (reservedNames.includes(name)) {\n this.$message.warning(this.$t('sysUpload.reservedName'));\n return;\n }\n\n // 检查名称是否重复\n const isDuplicate = settings.channels.some(ch => ch.name === name);\n if (isDuplicate) {\n this.$message.warning(this.$t('sysUpload.duplicateName'));\n return;\n }\n let newChannelData = {\n id: settings.channels.length + 1,\n name: this.newChannel.name,\n type: type,\n savePath: 'database',\n enabled: true,\n fixed: false\n };\n\n // 根据类型添加特定字段\n if (type === 'telegram') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n chatId: this.newChannel.chatId,\n proxyUrl: this.newChannel.proxyUrl\n });\n } else if (type === 's3') {\n Object.assign(newChannelData, {\n endpoint: this.newChannel.endpoint,\n cdnDomain: this.newChannel.cdnDomain,\n bucketName: this.newChannel.bucketName,\n region: this.newChannel.region,\n accessKeyId: this.newChannel.accessKeyId,\n secretAccessKey: this.newChannel.secretAccessKey,\n pathStyle: this.newChannel.pathStyle,\n quota: {\n ...this.newChannel.quota\n }\n });\n } else if (type === 'discord') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n channelId: this.newChannel.channelId,\n proxyUrl: this.newChannel.proxyUrl,\n isNitro: this.newChannel.isNitro\n });\n } else if (type === 'huggingface') {\n Object.assign(newChannelData, {\n repo: this.newChannel.repo,\n token: this.newChannel.token,\n isPrivate: this.newChannel.isPrivate\n });\n } else if (type === 'webdav') {\n const headers = this.parseHeadersText(this.newChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n Object.assign(newChannelData, {\n baseUrl: this.newChannel.baseUrl,\n username: this.newChannel.username,\n password: this.newChannel.password,\n publicUrl: this.newChannel.publicUrl,\n headers,\n createDirectory: this.newChannel.createDirectory !== false,\n quota: {\n ...this.newChannel.quota\n }\n });\n }\n settings.channels.push(newChannelData);\n this.showAddDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 确认编辑渠道\n confirmEditChannel() {\n this.$refs.editForm.validate(valid => {\n if (!valid) return;\n const settings = this.getSettings(this.currentChannelType);\n const currentIndex = this.currentChannelIndex;\n const originalName = settings.channels[currentIndex]?.name || this.editChannel.name;\n const editedChannel = {\n ...this.editChannel,\n name: originalName\n };\n if (this.currentChannelType === 'webdav') {\n const headers = this.parseHeadersText(editedChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n editedChannel.headers = headers;\n editedChannel.createDirectory = editedChannel.createDirectory !== false;\n delete editedChannel.headersText;\n }\n settings.channels[this.currentChannelIndex] = editedChannel;\n this.showEditDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 删除渠道\n deleteChannel(type, index) {\n const channel = this.getChannelList(type)[index];\n if (channel.fixed) {\n this.$message.warning(this.$t('sysUpload.fixedChannelCannotDelete'));\n return;\n }\n this.$confirm(this.$t('sysUpload.deleteChannelConfirm'), this.$t('common.warning'), {\n confirmButtonText: this.$t('common.confirm'),\n cancelButtonText: this.$t('common.cancel'),\n type: 'warning'\n }).then(() => {\n const settings = this.getSettings(type);\n settings.channels.splice(index, 1);\n // 重新调整 id\n settings.channels.forEach((item, i) => {\n item.id = i + 1;\n });\n // 自动保存\n this.saveSettings();\n }).catch(() => {});\n },\n saveSettings() {\n // 保存设置\n const settings = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n fetchWithAuth('/api/manage/sysConfig/upload', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(() => {\n this.$message.success(this.$t('sysOthers.settingsSaved'));\n });\n },\n // 获取容量统计(重新计算)\n async refreshQuota() {\n this.quotaLoading = true;\n try {\n // 使用 POST 请求重新统计容量(会触发索引重建)\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n } else {\n // 如果重新统计失败,尝试获取已有数据\n const getResponse = await fetchWithAuth('/api/manage/quota');\n const getData = await getResponse.json();\n if (getData.success) {\n this.quotaStats = getData.quotaStats || {};\n }\n }\n } catch (error) {\n console.error('Failed to refresh quota stats:', error);\n } finally {\n this.quotaLoading = false;\n }\n },\n // 获取容量统计(仅读取,不重建索引)\n async loadQuotaStats() {\n try {\n const response = await fetchWithAuth('/api/manage/quota');\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.quotaStats || {};\n }\n } catch (error) {\n console.error('Failed to load quota stats:', error);\n }\n },\n // 获取渠道已用容量 (GB)\n getChannelUsedGB(channel) {\n const stats = this.quotaStats[channel.name];\n if (!stats) return 0;\n return (stats.usedMB || 0) / 1024;\n },\n // 获取容量百分比\n getQuotaPercentage(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n const percentage = usedGB / limitGB * 100;\n return Math.min(100, Math.round(percentage * 10) / 10);\n },\n // 获取进度条状态\n getQuotaStatus(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) return 'exception';\n if (percentage >= 80) return 'warning';\n return 'success';\n },\n // 获取容量文本\n getQuotaText(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n return `${usedGB.toFixed(2)} / ${limitGB} GB`;\n },\n // 判断是否超过阈值\n isQuotaExceeded(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n return percentage >= threshold;\n },\n // 获取状态文本\n getQuotaStatusText(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) {\n return `⚠️ 已达到容量阈值 (${threshold}%),渠道写入已暂停`;\n }\n if (percentage >= 80) {\n return `⚡ 容量使用较高,接近阈值`;\n }\n return `✓ 容量正常`;\n },\n // 容量限制开关变化时\n async onQuotaEnabledChange(enabled, channel) {\n if (enabled && channel.name) {\n // 首次启用时,检查是否有该渠道的统计数据\n const stats = this.quotaStats[channel.name];\n if (!stats) {\n // 没有统计数据,提示用户需要重新统计\n this.$confirm(this.$t('sysUpload.quotaInitConfirm'), this.$t('sysUpload.quotaInitTitle'), {\n confirmButtonText: this.$t('sysUpload.quotaInitConfirmBtn'),\n cancelButtonText: this.$t('sysUpload.quotaInitCancelBtn'),\n type: 'info'\n }).then(async () => {\n await this.recalculateQuota();\n }).catch(() => {\n this.$message.info(this.$t('sysUpload.quotaInitLater'));\n });\n }\n }\n },\n // 重新统计容量\n async recalculateQuota() {\n this.quotaLoading = true;\n try {\n this.$message.info(this.$t('sysUpload.quotaCalculating'));\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n this.$message.success(this.$t('sysUpload.quotaCalculateSuccess'));\n } else {\n this.$message.error(this.$t('sysUpload.quotaCalculateError') + (data.error || ''));\n }\n } catch (error) {\n console.error('Failed to recalculate quota:', error);\n this.$message.error(this.$t('sysUpload.quotaCalculateFailed'));\n } finally {\n this.quotaLoading = false;\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/upload').then(response => response.json()).then(data => {\n this.telegramSettings = data.telegram;\n // 确保 R2 渠道有 quota 默认值\n if (data.cfr2 && data.cfr2.channels) {\n data.cfr2.channels = data.cfr2.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.cfr2Settings = data.cfr2;\n // 确保 S3 渠道有 quota 默认值\n if (data.s3 && data.s3.channels) {\n data.s3.channels = data.s3.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.s3Settings = data.s3;\n // 确保 Discord 渠道有默认值\n if (data.discord && data.discord.channels) {\n data.discord.channels = data.discord.channels.map(channel => ({\n ...channel,\n proxyUrl: channel.proxyUrl || ''\n }));\n }\n this.discordSettings = data.discord || {\n loadBalance: {},\n channels: []\n };\n // 确保 HuggingFace 渠道有默认值\n if (data.huggingface && data.huggingface.channels) {\n data.huggingface.channels = data.huggingface.channels.map(channel => ({\n ...channel,\n isPrivate: channel.isPrivate || false\n }));\n }\n this.huggingfaceSettings = data.huggingface || {\n loadBalance: {},\n channels: []\n };\n // 确保 WebDAV 渠道有默认值\n if (data.webdav && data.webdav.channels) {\n data.webdav.channels = data.webdav.channels.map(channel => ({\n ...channel,\n username: channel.username || '',\n password: channel.password || '',\n publicUrl: channel.publicUrl || '',\n headers: channel.headers || {},\n createDirectory: channel.createDirectory !== false,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.webdavSettings = data.webdav || {\n loadBalance: {},\n channels: []\n };\n // 加载容量统计(仅读取,不重建索引)\n this.loadQuotaStats();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogUpload.vue?vue&type=template&id=0082a519&scoped=true\"\nimport script from \"./SysCogUpload.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogUpload.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogUpload.vue?vue&type=style&index=0&id=0082a519&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0082a519\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"save-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"fade-up\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\"floating-save-btn\", {\n 'is-loading': $props.loading\n }]),\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args))\n }, [$props.loading ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"spinner\",\n spin: \"\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"save\"\n })), _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.loading ? _ctx.$t('floatingSave.saving') : _ctx.$t('floatingSave.save')), 1)], 2), [[_vShow, $data.visible]])]),\n _: 1\n });\n}","export default {\n name: 'FloatingSaveButton',\n emits: ['click'],\n props: {\n loading: {\n type: Boolean,\n default: false\n },\n show: {\n type: Boolean,\n default: true\n }\n },\n data() {\n return {\n visible: false\n };\n },\n watch: {\n show: {\n immediate: true,\n handler(val) {\n if (val) {\n // 延迟显示,等待 Element Plus 加载遮罩淡出动画完成\n setTimeout(() => {\n this.visible = true;\n }, 600);\n } else {\n this.visible = false;\n }\n }\n }\n },\n methods: {\n handleClick() {\n if (!this.loading) {\n this.$emit('click');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FloatingSaveButton.vue?vue&type=template&id=9cef95d2&scoped=true\"\nimport script from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\nexport * from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\n\nimport \"./FloatingSaveButton.vue?vue&type=style&index=0&id=9cef95d2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9cef95d2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"security-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"second-title\"\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_6 = {\n class: \"second-title\"\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_8 = {\n class: \"second-title token-title\"\n};\nconst _hoisted_9 = {\n class: \"token-actions\"\n};\nconst _hoisted_10 = {\n class: \"token-table-container\"\n};\nconst _hoisted_11 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_12 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_13 = {\n class: \"token-display\"\n};\nconst _hoisted_14 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_15 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_16 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_17 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_18 = {\n class: \"table-cell-content action-buttons\"\n};\nconst _hoisted_19 = {\n class: \"first-settings\"\n};\nconst _hoisted_20 = {\n class: \"first-title\"\n};\nconst _hoisted_21 = {\n class: \"second-title\"\n};\nconst _hoisted_22 = {\n class: \"second-title\"\n};\nconst _hoisted_23 = {\n class: \"query-param-list\"\n};\nconst _hoisted_24 = {\n class: \"query-param-list\"\n};\nconst _hoisted_25 = {\n class: \"first-settings\"\n};\nconst _hoisted_26 = {\n class: \"first-title\"\n};\nconst _hoisted_27 = {\n class: \"second-title\"\n};\nconst _hoisted_28 = {\n class: \"second-title\"\n};\nconst _hoisted_29 = {\n class: \"second-title\"\n};\nconst _hoisted_30 = {\n class: \"second-title\"\n};\nconst _hoisted_31 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_32 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_33 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_34 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_35 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_36 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_37 = {\n class: \"token-result\"\n};\nconst _hoisted_38 = {\n style: {\n \"margin-bottom\": \"15px\",\n \"color\": \"#e6a23c\"\n }\n};\nconst _hoisted_39 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.$t('sysSecurity.authManagement')), 1), _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.$t('sysSecurity.userAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.user,\n rules: $options.userPassRules,\n ref: \"userPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.uploadPassword'),\n prop: \"authCode\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.authCode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.authSettings.user.authCode = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleUserPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.user._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearUserPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.user._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearUserPassword,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.clearUserPassword = $event),\n onChange: $options.handleClearUserPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showUserPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewUserPassword\",\n key: \"user-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.confirmNewUserPassword,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.authSettings.user.confirmNewUserPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_6, _toDisplayString(_ctx.$t('sysSecurity.adminAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.admin,\n rules: $options.adminPassRules,\n ref: \"adminPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminUsername'),\n prop: \"adminUsername\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminUsername,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.authSettings.admin.adminUsername = $event),\n autocomplete: \"new-password\",\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminPassword'),\n prop: \"adminPassword\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminPassword,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.authSettings.admin.adminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleAdminPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.admin._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.admin._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearAdminPassword,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.clearAdminPassword = $event),\n onChange: $options.handleClearAdminPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showAdminPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewAdminPassword\",\n key: \"admin-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.confirmNewAdminPassword,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.authSettings.admin.confirmNewAdminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.apiTokenManagement')) + \" \", 1), _createElementVNode(\"a\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showCreateTokenDialog = true),\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n })])]), _createElementVNode(\"div\", _hoisted_10, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $data.apiTokens,\n class: \"token-table\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"name\",\n label: _ctx.$t('sysSecurity.tokenName'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(scope.row.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"token\",\n label: _ctx.$t('sysSecurity.tokenValue'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(scope.row.token), 1)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"permissions\",\n label: _ctx.$t('sysSecurity.permissions'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(scope.row.permissions, perm => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: perm,\n size: \"small\",\n class: \"permission-tag\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getPermissionText(perm)), 1)]),\n _: 2\n }, 1024);\n }), 128))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"createdAt\",\n label: _ctx.$t('sysSecurity.createdAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_15, _toDisplayString($options.formatDate(scope.row.createdAt)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.status'),\n \"header-align\": \"center\",\n width: \"90\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tag, {\n type: $options.getTokenStatus(scope.row.expiresAt).status === 'active' ? 'success' : 'danger',\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getTokenStatus(scope.row.expiresAt).label), 1)]),\n _: 2\n }, 1032, [\"type\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.expiresAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.getTokenStatus(scope.row.expiresAt).expiresText), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.operation'),\n fixed: \"right\",\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n onClick: $event => $options.editToken(scope.row)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteToken(scope.row.id)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, $data.tokenLoading]])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"h3\", _hoisted_20, _toDisplayString(_ctx.$t('sysSecurity.uploadManagement')), 1), _createElementVNode(\"h4\", _hoisted_21, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageReview')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageReviewTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.moderate,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.moderate.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.uploadSettings.moderate.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.reviewChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.moderate.channel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.uploadSettings.moderate.channel = $event),\n placeholder: _ctx.$t('sysSecurity.reviewChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"moderatecontent.com\",\n value: \"moderatecontent.com\"\n }), _createVNode(_component_el_option, {\n label: \"nsfwjs\",\n value: \"nsfwjs\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.moderate.channel === 'moderatecontent.com' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.apiKey')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.moderateContentApiKey,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.uploadSettings.moderate.moderateContentApiKey = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.uploadSettings.moderate.channel === 'nsfwjs' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.nsfwApiPath,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadSettings.moderate.nsfwApiPath = $event),\n placeholder: \"https://nsfwjs.your.domain\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.ipQuery')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.ipQueryTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.ipQuery,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableIpQuery')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.ipQuery.enabled,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.uploadSettings.ipQuery.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.ipQueryChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.ipQuery.channel,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.uploadSettings.ipQuery.channel = $event),\n placeholder: _ctx.$t('sysSecurity.ipQueryChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: _ctx.$t('sysSecurity.customApi'),\n value: \"customApi\"\n }, null, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.ipQuery.channel === 'customApi' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.url,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.uploadSettings.ipQuery.customApi.url = $event),\n placeholder: \"https://api.example.com/ip\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.queryParams')\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_23, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.params, (param, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"query-param-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: param.key,\n \"onUpdate:modelValue\": $event => param.key = $event,\n placeholder: _ctx.$t('sysSecurity.paramNamePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_input, {\n modelValue: param.value,\n \"onUpdate:modelValue\": $event => param.value = $event,\n placeholder: _ctx.$t('sysSecurity.paramValuePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryParam(index),\n disabled: $data.uploadSettings.ipQuery.customApi.params.length <= 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryParam\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addQueryParam')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.responseFields')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.responseFieldsTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.responseFields, (field, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"response-field-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.responseFields[index],\n \"onUpdate:modelValue\": $event => $data.uploadSettings.ipQuery.customApi.responseFields[index] = $event,\n placeholder: _ctx.$t('sysSecurity.responseFieldPathPlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, -1),\n disabled: index === 0\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, 1),\n disabled: index === $data.uploadSettings.ipQuery.customApi.responseFields.length - 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryResponseField(index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryResponseField\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addResponseField')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"h3\", _hoisted_26, _toDisplayString(_ctx.$t('sysSecurity.accessManagement')), 1), _createElementVNode(\"h4\", _hoisted_27, _toDisplayString(_ctx.$t('sysSecurity.domainFilter')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.allowedDomains')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.allowedDomainsTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.allowedDomains,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.accessSettings.allowedDomains = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_28, _toDisplayString(_ctx.$t('sysSecurity.whiteListMode')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"accessForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableWhiteList')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableWhiteListTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.whiteListMode,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.accessSettings.whiteListMode = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_29, _toDisplayString(_ctx.$t('sysSecurity.imageTransform')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"imageTransformForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableImageTransform')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableImageTransformTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.imageTransformEnabled,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.accessSettings.imageTransformEnabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), $data.accessSettings.imageTransformEnabled ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n prop: \"imageTransformAllowedSizes\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageTransformAllowedSizes')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageTransformAllowedSizesHint'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.imageTransformAllowedSizes,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.accessSettings.imageTransformAllowedSizes = $event),\n placeholder: _ctx.$t('sysSecurity.imageTransformAllowedSizesPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_30, _toDisplayString(_ctx.$t('sysSecurity.sessionSecurityPolicy')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.secureMode')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.secureModeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.sessionSecure,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.accessSettings.sessionSecure = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.userSessionMaxAge'),\n prop: \"userSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.userSessionMaxAge,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.accessSettings.userSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminSessionMaxAge'),\n prop: \"adminSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.adminSessionMaxAge,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.accessSettings.adminSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_32, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showCreateTokenDialog,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.showCreateTokenDialog = $event),\n title: _ctx.$t('sysSecurity.createTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_34, [_createVNode(_component_el_button, {\n onClick: _cache[28] || (_cache[28] = $event => $data.showCreateTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.createToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.createBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newToken,\n rules: $options.tokenRules,\n ref: \"tokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel'),\n prop: \"name\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newToken.name,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newToken.name = $event),\n placeholder: _ctx.$t('sysSecurity.tokenNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.newToken.permissions,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.neverExpire,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newToken.neverExpire = $event),\n onChange: $options.onCreateNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_el_input_number, {\n modelValue: $data.newToken.expirationValue,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.newToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.autoDelete,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditTokenDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showEditTokenDialog = $event),\n title: _ctx.$t('sysSecurity.editTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_36, [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showEditTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.updateToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.updateBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editingToken,\n rules: $options.editTokenRules,\n ref: \"editTokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editingToken.name,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.editingToken.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.editingToken.permissions,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.editingToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.neverExpire,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.editingToken.neverExpire = $event),\n onChange: $options.onEditNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_el_input_number, {\n modelValue: $data.editingToken.expirationValue,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.editingToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.editingToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[34] || (_cache[34] = $event => $data.editingToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.autoDelete,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.editingToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showTokenResultDialog,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.showTokenResultDialog = $event),\n title: _ctx.$t('sysSecurity.tokenCreatedTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[39] || (_cache[39] = $event => $data.showTokenResultDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.savedBtn')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"p\", _hoisted_38, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"5px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysSecurity.tokenCreatedWarning')), 1)]), _createVNode(_component_el_form, {\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString($data.createdToken.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.fullToken')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.createdToken.token,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.createdToken.token = $event),\n readonly: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.copyToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.copyBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])])), [[_directive_loading, $data.loading]]);\n}","/**\r\n * Token 过期时间工具模块\r\n * 提供 Token 有效期计算、状态判定和向后兼容默认值填充功能\r\n */\r\n\r\n/**\r\n * 时间单位到毫秒的映射(月和年需要特殊处理)\r\n */\r\nconst SIMPLE_UNIT_MS = {\r\n s: 1000,\r\n m: 60 * 1000,\r\n h: 60 * 60 * 1000,\r\n d: 24 * 60 * 60 * 1000,\r\n};\r\n\r\n/**\r\n * 根据基准时间、数值和时间单位计算过期时间\r\n * @param {Date|string} baseTime - 基准时间(Date 对象或 ISO 8601 字符串)\r\n * @param {number} value - 正整数有效期数值\r\n * @param {string} unit - 时间单位:'s','m','h','d','M','Y'\r\n * @returns {string} 过期时间 ISO 8601 字符串\r\n * @throws {Error} 当 value <= 0 或 unit 无效时抛出错误\r\n */\r\nexport function computeExpiresAt(baseTime, value, unit) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new Error('有效期数值必须大于 0');\r\n }\r\n\r\n const base = typeof baseTime === 'string' ? new Date(baseTime) : new Date(baseTime.getTime());\r\n\r\n if (SIMPLE_UNIT_MS[unit]) {\r\n return new Date(base.getTime() + value * SIMPLE_UNIT_MS[unit]).toISOString();\r\n }\r\n\r\n if (unit === 'M') {\r\n base.setUTCMonth(base.getUTCMonth() + value);\r\n return base.toISOString();\r\n }\r\n\r\n if (unit === 'Y') {\r\n base.setUTCFullYear(base.getUTCFullYear() + value);\r\n return base.toISOString();\r\n }\r\n\r\n throw new Error(`无效的时间单位: ${unit}`);\r\n}\r\n\r\n\r\n/**\r\n * 格式化过期时间为可读字符串\r\n * @param {string} isoString - ISO 8601 时间字符串\r\n * @returns {string} 格式化后的时间字符串\r\n */\r\nfunction formatExpiresTime(isoString) {\r\n const date = new Date(isoString);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const hours = String(date.getHours()).padStart(2, '0');\r\n const minutes = String(date.getMinutes()).padStart(2, '0');\r\n const seconds = String(date.getSeconds()).padStart(2, '0');\r\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n}\r\n\r\n/**\r\n * 获取 Token 的状态信息\r\n * @param {string|null} expiresAt - 过期时间 ISO 8601 字符串,null 表示永不过期\r\n * @param {Date} [now=new Date()] - 当前时间\r\n * @returns {{ status: 'active'|'expired', label: '有效'|'已过期', expiresText: string }}\r\n */\r\nexport function getTokenStatus(expiresAt, now = new Date()) {\r\n if (expiresAt === null || expiresAt === undefined) {\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: '永不过期',\r\n };\r\n }\r\n\r\n const expiresDate = new Date(expiresAt);\r\n const currentTime = now instanceof Date ? now : new Date(now);\r\n const formattedTime = formatExpiresTime(expiresAt);\r\n\r\n if (currentTime.getTime() > expiresDate.getTime()) {\r\n return {\r\n status: 'expired',\r\n label: '已过期',\r\n expiresText: formattedTime,\r\n };\r\n }\r\n\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: formattedTime,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * 为缺少过期相关字段的旧 Token 数据填充默认值\r\n * @param {Object} tokenData - Token 数据对象\r\n * @returns {Object} 填充默认值后的新 Token 数据对象\r\n */\r\nexport function applyTokenDefaults(tokenData) {\r\n return {\r\n ...tokenData,\r\n expiresAt: tokenData.expiresAt ?? null,\r\n autoDelete: tokenData.autoDelete ?? false,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nimport { computeExpiresAt, getTokenStatus } from '@/utils/tokenExpiration';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n authSettings: {\n user: {},\n admin: {}\n },\n uploadSettings: {\n moderate: {},\n ipQuery: {\n enabled: false,\n channel: 'customApi',\n customApi: {\n url: '',\n params: [{\n key: 'ip',\n value: '{ip}'\n }],\n responseFields: []\n }\n }\n },\n accessSettings: {},\n apiTokens: [],\n // API Token列表\n // 加载状态\n loading: true,\n tokenLoading: false,\n // 修改密码相关\n oriUserPassword: '',\n // 原上传密码\n oriAdminPassword: '',\n // 原管理端密码\n\n showUserPassConfirm: false,\n // 显示用户密码确认框\n showAdminPassConfirm: false,\n // 显示管理密码确认框\n clearUserPassword: false,\n // 清除用户密码开关\n clearAdminPassword: false,\n // 清除管理密码开关\n\n // Token对话框相关\n showCreateTokenDialog: false,\n showEditTokenDialog: false,\n showTokenResultDialog: false,\n timeUnitOptions: [{\n labelKey: 'sysSecurity.timeUnitSeconds',\n value: 's'\n }, {\n labelKey: 'sysSecurity.timeUnitMinutes',\n value: 'm'\n }, {\n labelKey: 'sysSecurity.timeUnitHours',\n value: 'h'\n }, {\n labelKey: 'sysSecurity.timeUnitDays',\n value: 'd'\n }, {\n labelKey: 'sysSecurity.timeUnitMonths',\n value: 'M'\n }, {\n labelKey: 'sysSecurity.timeUnitYears',\n value: 'Y'\n }],\n newToken: {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n editingToken: {\n id: '',\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n createdToken: {\n name: '',\n token: ''\n }\n };\n },\n computed: {\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n userPassRules() {\n return {\n authCode: [{\n validator: (rule, value, callback) => {\n const urlReservedChars = ['%', '&', '?', '#', '/'];\n const hasReservedChar = urlReservedChars.some(char => value && value.includes(char));\n if (hasReservedChar) {\n callback(new Error(this.$t('sysSecurity.passwordUrlReserved')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }],\n confirmNewUserPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmUploadPassword')));\n } else if (value !== this.authSettings.user.authCode) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n adminPassRules() {\n return {\n confirmNewAdminPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmAdminPassword')));\n } else if (value !== this.authSettings.admin.adminPassword) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n accessRules() {\n const validateSessionMaxAge = (rule, value, callback) => {\n if (!Number.isInteger(value) || value < 1 || value > 3650) {\n callback(new Error(this.$t('sysSecurity.sessionMaxAgeInvalid')));\n } else {\n callback();\n }\n };\n const validateImageTransformAllowedSizes = (rule, value, callback) => {\n if (!this.accessSettings.imageTransformEnabled || !value || !value.trim()) {\n callback();\n return;\n }\n const sizes = value.split(',').map(size => size.trim().toLowerCase()).filter(Boolean);\n const valid = sizes.every(size => {\n const match = size.match(/^(auto|[1-9]\\d*)x(auto|[1-9]\\d*)$/);\n if (!match || match[1] === 'auto' && match[2] === 'auto') return false;\n return match.slice(1).every(dimension => dimension === 'auto' || Number(dimension) <= 4096);\n });\n if (!valid) {\n callback(new Error(this.$t('sysSecurity.imageTransformAllowedSizesInvalid')));\n } else {\n callback();\n }\n };\n return {\n userSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n adminSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n imageTransformAllowedSizes: [{\n validator: validateImageTransformAllowedSizes,\n trigger: ['blur', 'change']\n }]\n };\n },\n tokenRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysSecurity.tokenNameRequired'),\n trigger: 'blur'\n }],\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.newToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n editTokenRules() {\n return {\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.editingToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n normalizeIpQuerySettings(settings = {}) {\n const ipQuery = settings.ipQuery || {};\n const customApi = ipQuery.customApi || {};\n const params = Array.isArray(customApi.params) && customApi.params.length > 0 ? customApi.params.map(param => ({\n key: param?.key || '',\n value: param?.value || ''\n })) : [{\n key: 'ip',\n value: '{ip}'\n }];\n const responseFields = Array.isArray(customApi.responseFields) ? customApi.responseFields.map(field => {\n if (typeof field === 'string') return field;\n return field?.path || '';\n }) : [];\n return {\n ...settings,\n moderate: settings.moderate || {},\n ipQuery: {\n enabled: ipQuery.enabled ?? false,\n channel: ipQuery.channel || 'customApi',\n customApi: {\n url: customApi.url || '',\n params,\n responseFields\n }\n }\n };\n },\n addIpQueryParam() {\n this.uploadSettings.ipQuery.customApi.params.push({\n key: '',\n value: ''\n });\n },\n removeIpQueryParam(index) {\n if (this.uploadSettings.ipQuery.customApi.params.length <= 1) return;\n this.uploadSettings.ipQuery.customApi.params.splice(index, 1);\n },\n addIpQueryResponseField() {\n this.uploadSettings.ipQuery.customApi.responseFields.push('');\n },\n removeIpQueryResponseField(index) {\n this.uploadSettings.ipQuery.customApi.responseFields.splice(index, 1);\n },\n moveIpQueryResponseField(index, direction) {\n const fields = this.uploadSettings.ipQuery.customApi.responseFields;\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= fields.length) return;\n const [field] = fields.splice(index, 1);\n fields.splice(targetIndex, 0, field);\n },\n handleUserPassInput() {\n if (this.authSettings.user.authCode !== this.oriUserPassword) {\n this.showUserPassConfirm = true;\n } else {\n this.showUserPassConfirm = false;\n }\n },\n handleAdminPassInput() {\n if (this.authSettings.admin.adminPassword !== this.oriAdminPassword) {\n this.showAdminPassConfirm = true;\n } else {\n this.showAdminPassConfirm = false;\n }\n },\n handleClearUserPassword(checked) {\n if (checked) {\n this.authSettings.user.authCode = '';\n this.showUserPassConfirm = false;\n }\n },\n handleClearAdminPassword(checked) {\n if (checked) {\n this.authSettings.admin.adminPassword = '';\n this.authSettings.admin.adminUsername = '';\n this.showAdminPassConfirm = false;\n }\n },\n // Token相关方法\n getPermissionText(permission) {\n const permissionMap = {\n 'upload': this.$t('sysSecurity.permUpload'),\n 'delete': this.$t('sysSecurity.permDelete'),\n 'list': this.$t('sysSecurity.permList'),\n 'manage': this.$t('sysSecurity.permManage')\n };\n return permissionMap[permission] || permission;\n },\n formatDate(dateString) {\n return new Date(dateString).toLocaleString('zh-CN');\n },\n async loadApiTokens() {\n this.tokenLoading = true;\n try {\n const response = await fetchWithAuth('/api/manage/apiTokens');\n const data = await response.json();\n this.apiTokens = data.tokens || [];\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenListFailed'));\n } finally {\n this.tokenLoading = false;\n }\n },\n createToken() {\n this.$refs.tokenForm.validate(async valid => {\n if (!valid) return;\n try {\n this.newToken.owner = 'admin'; // 默认所有Token归属管理员\n\n let expiresAt = null;\n let autoDelete = false;\n if (!this.newToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.newToken.expirationValue, this.newToken.expirationUnit);\n autoDelete = this.newToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: this.newToken.name,\n owner: this.newToken.owner,\n permissions: this.newToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.createdToken = {\n name: data.name,\n token: data.token\n };\n this.showCreateTokenDialog = false;\n this.showTokenResultDialog = true;\n this.newToken = {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n };\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenCreateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenCreateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenCreateFailed'));\n }\n });\n },\n editToken(token) {\n const hasExpiration = token.expiresAt !== null && token.expiresAt !== undefined;\n this.editingToken = {\n id: token.id,\n name: token.name,\n owner: token.owner,\n permissions: [...token.permissions],\n neverExpire: !hasExpiration,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: token.autoDelete || false\n };\n this.showEditTokenDialog = true;\n },\n updateToken() {\n this.$refs.editTokenForm.validate(async valid => {\n if (!valid) return;\n try {\n let expiresAt = null;\n let autoDelete = false;\n if (!this.editingToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.editingToken.expirationValue, this.editingToken.expirationUnit);\n autoDelete = this.editingToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tokenId: this.editingToken.id,\n permissions: this.editingToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.showEditTokenDialog = false;\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenUpdateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenUpdateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenUpdateFailed'));\n }\n });\n },\n async deleteToken(tokenId) {\n try {\n await this.$confirm(this.$t('sysSecurity.tokenDeleteConfirm'), this.$t('sysSecurity.tokenDeleteConfirmTitle'), {\n confirmButtonText: this.$t('sysSecurity.tokenDeleteConfirmOk'),\n cancelButtonText: this.$t('sysSecurity.tokenDeleteConfirmCancel'),\n type: 'warning'\n });\n const response = await fetchWithAuth(`/api/manage/apiTokens?id=${tokenId}`, {\n method: 'DELETE'\n });\n const data = await response.json();\n if (response.ok) {\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenDeleteSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenDeleteFailed'));\n }\n } catch (error) {\n if (error !== 'cancel') {\n this.$message.error(this.$t('sysSecurity.tokenDeleteFailed'));\n }\n }\n },\n async copyToken() {\n try {\n await navigator.clipboard.writeText(this.createdToken.token);\n this.$message.success(this.$t('sysSecurity.tokenCopied'));\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.copyFailed'));\n }\n },\n onCreateNeverExpireChange(val) {\n if (val) {\n this.newToken.autoDelete = false;\n }\n },\n onEditNeverExpireChange(val) {\n if (val) {\n this.editingToken.autoDelete = false;\n }\n },\n getTokenStatus(expiresAt) {\n return getTokenStatus(expiresAt);\n },\n saveSettings() {\n // 所有表单的Promise数组\n let validationPromises = [];\n\n // 验证用户密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.userPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证管理密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.adminPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证会话安全策略表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.accessForm.validate(valid => {\n resolve(valid);\n });\n }));\n validationPromises.push(new Promise(resolve => {\n this.$refs.imageTransformForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 等待所有验证完成\n Promise.all(validationPromises).then(results => {\n const isValid = results.every(valid => valid);\n if (!isValid) {\n return;\n }\n\n // 验证会话有效期为 1-3650 的正整数\n if (this.accessSettings.userSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.userSessionMaxAge) || this.accessSettings.userSessionMaxAge > 3650 || this.accessSettings.adminSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.adminSessionMaxAge) || this.accessSettings.adminSessionMaxAge > 3650) {\n this.$message.error(this.$t('sysSecurity.sessionMaxAgeInvalid'));\n return;\n }\n const settings = {\n auth: this.authSettings,\n upload: this.uploadSettings,\n access: this.accessSettings\n };\n // 不保存确认密码相关字段\n delete settings.auth.user.confirmNewUserPassword;\n delete settings.auth.admin.confirmNewAdminPassword;\n\n // 标记清除密码\n if (this.clearUserPassword) {\n settings.auth.user._clear = true;\n settings.auth.user.authCode = '';\n }\n if (this.clearAdminPassword) {\n settings.auth.admin._clear = true;\n settings.auth.admin.adminPassword = '';\n }\n fetchWithAuth('/api/manage/sysConfig/security', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(res => res.json()).then(data => {\n // 管理端密码变更后,当前会话已被清除,需要重新登录\n if (data.adminPasswordChanged) {\n const msg = this.$t('sysSecurity.adminPasswordChangedRelogin');\n this.$message.warning(msg);\n setTimeout(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n }, 1500);\n return;\n }\n this.$message.success(this.$t('sysSecurity.settingsSaved'));\n // 保存成功后重置密码字段为空(后端已处理)\n this.authSettings.user.authCode = '';\n this.authSettings.admin.adminPassword = '';\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n // 标记已有密码(如果用户刚设置了密码,且不是清除操作)\n if (settings.auth.user.authCode && !settings.auth.user._clear) {\n this.authSettings.user._hasPassword = true;\n } else if (settings.auth.user._clear) {\n this.authSettings.user._hasPassword = false;\n }\n if (settings.auth.admin.adminPassword && !settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = true;\n } else if (settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = false;\n }\n this.showUserPassConfirm = false;\n this.showAdminPassConfirm = false;\n this.clearUserPassword = false;\n this.clearAdminPassword = false;\n }).catch(() => {\n // 如果请求过程中 session 已失效导致 fetchWithAuth 跳转,忽略后续错误\n });\n });\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/security').then(response => response.json()).then(data => {\n this.authSettings = data.auth;\n this.uploadSettings = this.normalizeIpQuerySettings(data.upload);\n this.accessSettings = {\n imageTransformEnabled: false,\n imageTransformAllowedSizes: '',\n ...data.access\n };\n\n // 密码从后端返回为空(安全考虑),记录原始空值\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n this.authSettings.user.confirmNewUserPassword = '';\n this.authSettings.admin.confirmNewAdminPassword = '';\n\n // 加载API Token列表\n this.loadApiTokens();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogSecurity.vue?vue&type=template&id=264510a6&scoped=true\"\nimport script from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogSecurity.vue?vue&type=style&index=0&id=264510a6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-264510a6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"page-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-title\"\n};\nconst _hoisted_3 = {\n key: 5,\n class: \"announcement-refresh-option\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedSettings, (categoryGroup, categoryName) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: categoryName,\n class: \"first-settings\"\n }, [_createElementVNode(\"h3\", _hoisted_2, _toDisplayString(categoryName), 1), _createVNode(_component_el_form, {\n model: $data.settings,\n \"label-width\": \"150px\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(categoryGroup, (setting, index) => {\n return _openBlock(), _createBlock(_component_el_form_item, {\n key: setting.id,\n class: _normalizeClass({\n 'announcement-manual-height': setting.id === 'announcement' && $data.announcementManualHeight !== null\n }),\n style: _normalizeStyle(setting.id === 'announcement' && $data.announcementManualHeight !== null ? {\n '--announcement-manual-height': `${$data.announcementManualHeight}px`\n } : undefined)\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString($options.localized(setting, 'label')) + \" \", 1), setting.tooltip ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: $options.localized(setting, 'tooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [setting.type === 'select' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 0,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(setting.options, option => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: option.value,\n label: $options.localizedOption(option),\n value: option.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'channelName' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 1,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: !$options.currentUploadChannel || $options.currentChannelList.length === 0,\n placeholder: _ctx.$t('sysPage.channelSelectPlaceholder'),\n clearable: \"\",\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'boolean' ? (_openBlock(), _createBlock(_component_el_switch, {\n key: 2,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\"])) : setting.type === 'textarea' ? (_openBlock(), _createBlock(_component_el_input, {\n key: 3,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n type: \"textarea\",\n autosize: {\n minRows: 2,\n maxRows: setting.id === 'announcement' ? 8 : undefined\n },\n resize: \"vertical\",\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n onMousedown: $event => $options.handleAnnouncementResizeStart($event, setting)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"autosize\", \"disabled\", \"placeholder\", \"onMousedown\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 4,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])), setting.id === 'announcement' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_el_checkbox, {\n modelValue: $data.refreshAnnouncement,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.refreshAnnouncement = $event)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysPage.refreshAnnouncement')), 1)]),\n _: 1\n }, 8, [\"modelValue\"])])) : _createCommentVNode(\"\", true)]),\n _: 2\n }, 1032, [\"class\", \"style\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"model\"])]);\n }), 128)), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport axios from '@/utils/axios';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n config: []\n },\n // 加载状态\n loading: true,\n // 即使公告内容未变化,也在本次保存时刷新公告已读状态\n refreshAnnouncement: false,\n // 公告文本域手动拖拽后的高度\n announcementManualHeight: null,\n announcementResizeMouseUpHandler: null,\n // 可用渠道列表\n availableChannels: {}\n };\n },\n computed: {\n isEn() {\n return this.$i18n.locale === 'en';\n },\n // 根据category将配置项分组\n groupedSettings() {\n const grouped = {};\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n const category = this.isEn ? setting.category_en || setting.category || this.$t('sysPage.otherSettings') : setting.category || this.$t('sysPage.otherSettings');\n if (!grouped[category]) {\n grouped[category] = [];\n }\n grouped[category].push(setting);\n });\n }\n return grouped;\n },\n // 当前选择的上传渠道\n currentUploadChannel() {\n const channelSetting = this.settings.config?.find(s => s.id === 'defaultUploadChannel');\n return channelSetting?.value || '';\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.currentUploadChannel] || [];\n }\n },\n watch: {\n // 监听上传渠道变化,清空渠道名称(如果不在新列表中)\n currentUploadChannel(newVal, oldVal) {\n if (newVal !== oldVal) {\n const channelNameSetting = this.settings.config?.find(s => s.id === 'defaultChannelName');\n if (channelNameSetting) {\n const newChannelList = this.availableChannels[newVal] || [];\n if (!newChannelList.some(ch => ch.name === channelNameSetting.value)) {\n channelNameSetting.value = '';\n }\n }\n }\n }\n },\n methods: {\n localized(item, field) {\n if (this.isEn && item[field + '_en']) return item[field + '_en'];\n return item[field] || '';\n },\n localizedOption(option) {\n if (this.isEn && option.label_en) return option.label_en;\n return option.label;\n },\n handleAnnouncementResizeStart(event, setting) {\n if (setting.id !== 'announcement') return;\n const textarea = event.target.closest?.('textarea');\n if (!textarea) return;\n const rect = textarea.getBoundingClientRect();\n const resizeHandleSize = 24;\n const isResizeHandle = event.clientX >= rect.right - resizeHandleSize && event.clientY >= rect.bottom - resizeHandleSize;\n if (!isResizeHandle) return;\n const formItem = textarea.closest('.el-form-item');\n if (this.announcementResizeMouseUpHandler) {\n window.removeEventListener('mouseup', this.announcementResizeMouseUpHandler);\n }\n const startHeight = textarea.offsetHeight;\n textarea.style.height = `${startHeight}px`;\n formItem?.classList.remove('announcement-manual-height');\n this.announcementResizeMouseUpHandler = () => {\n const resizedHeight = textarea.offsetHeight;\n const manualHeight = Math.abs(resizedHeight - startHeight) > 1 ? resizedHeight : this.announcementManualHeight;\n if (manualHeight !== null) {\n this.announcementManualHeight = manualHeight;\n formItem?.style.setProperty('--announcement-manual-height', `${manualHeight}px`);\n formItem?.classList.add('announcement-manual-height');\n }\n this.announcementResizeMouseUpHandler = null;\n };\n window.addEventListener('mouseup', this.announcementResizeMouseUpHandler, {\n once: true\n });\n },\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/page', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n ...this.settings,\n refreshAnnouncement: this.refreshAnnouncement\n })\n }).then(() => {\n this.refreshAnnouncement = false;\n this.$message.success(this.$t('sysPage.settingsSaved'));\n });\n },\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\n if (response.data) {\n this.availableChannels = response.data;\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n beforeUnmount() {\n if (this.announcementResizeMouseUpHandler) {\n window.removeEventListener('mouseup', this.announcementResizeMouseUpHandler);\n }\n },\n mounted() {\n this.loading = true;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/page').then(response => response.json()).then(data => {\n this.settings = data;\n // 初始化配置项默认值,并规范化布尔类型\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n if ((setting.value === undefined || setting.value === null || setting.value === '') && setting.default !== undefined) {\n setting.value = setting.default;\n }\n if (setting.type === 'boolean') {\n // 将字符串转换为布尔值\n if (typeof setting.value === 'string') {\n setting.value = setting.value === 'true';\n }\n }\n });\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogPage.vue?vue&type=template&id=342e4dda&scoped=true\"\nimport script from \"./SysCogPage.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogPage.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogPage.vue?vue&type=style&index=0&id=342e4dda&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-342e4dda\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"others-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"first-title\"\n};\nconst _hoisted_5 = {\n class: \"first-title\"\n};\nconst _hoisted_6 = {\n class: \"first-title\"\n};\nconst _hoisted_7 = [\"innerHTML\"];\nconst _hoisted_8 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.remoteTelemetry')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.remoteTelemetryTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.telemetry,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.telemetry.enabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.settings.telemetry.enabled = $event),\n disabled: $data.settings.telemetry.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_4, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.cloudflareApiToken')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.cloudflareApiTokenTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.cloudflareApiToken,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.zoneId')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_ZONE_ID,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.settings.cloudflareApiToken.CF_ZONE_ID = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.accountEmail')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_EMAIL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.settings.cloudflareApiToken.CF_EMAIL = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: \"API Key\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_API_KEY,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.settings.cloudflareApiToken.CF_API_KEY = $event),\n disabled: $data.settings.cloudflareApiToken.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_5, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.randomImageApi')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.randomImageApiTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.randomImageAPI,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.randomImageAPI.enabled,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.settings.randomImageAPI.enabled = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"randomImageAPI.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.directory')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.directoryTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.randomImageAPI.allowedDir,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.settings.randomImageAPI.allowedDir = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_6, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.publicBrowse')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.publicBrowseTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.publicBrowse,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.publicBrowse.enabled,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.settings.publicBrowse.enabled = $event),\n disabled: $data.settings.publicBrowse.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"publicBrowse.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.openDirectory')), 1), _createVNode(_component_el_tooltip, {\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n content: _withCtx(() => [_createElementVNode(\"div\", {\n style: {\n \"max-width\": \"320px\",\n \"line-height\": \"1.6\"\n },\n innerHTML: _ctx.$t('sysOthers.openDirectoryTooltip')\n }, null, 8, _hoisted_7)]),\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.publicBrowse.allowedDir,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.settings.publicBrowse.allowedDir = $event),\n disabled: $data.settings.publicBrowse.fixed,\n placeholder: \"wallpaper,photos,album\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.webdav')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.webdavTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.webDAV,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.webDAV.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.settings.webDAV.enabled = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.username,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.settings.webDAV.username = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.password,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.settings.webDAV.password = $event),\n disabled: $data.settings.webDAV.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUploadChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.uploadChannel,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.settings.webDAV.uploadChannel = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('sysOthers.webdavDefaultChannel'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"Telegram\",\n value: \"telegram\"\n }), _createVNode(_component_el_option, {\n label: \"Cloudflare R2\",\n value: \"cfr2\"\n }), _createVNode(_component_el_option, {\n label: \"S3\",\n value: \"s3\"\n }), _createVNode(_component_el_option, {\n label: \"Discord\",\n value: \"discord\"\n }), _createVNode(_component_el_option, {\n label: \"HuggingFace\",\n value: \"huggingface\"\n }), _createVNode(_component_el_option, {\n label: \"WebDAV\",\n value: \"webdav\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.settings.webDAV.uploadChannel && $options.webdavChannelList.length > 1 ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysOthers.webdavChannelName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.channelName,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.settings.webDAV.channelName = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.webdavChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n telemetry: {},\n randomImageAPI: {},\n cloudflareApiToken: {},\n webDAV: {},\n publicBrowse: {}\n },\n availableChannels: {},\n // 可用渠道列表\n // 加载状态\n loading: true\n };\n },\n computed: {\n // WebDAV 当前渠道类型对应的渠道列表\n webdavChannelList() {\n const channelType = this.settings.webDAV?.uploadChannel;\n return channelType ? this.availableChannels[channelType] || [] : [];\n }\n },\n watch: {\n 'settings.webDAV.uploadChannel'() {\n // 切换渠道类型时清空指定的渠道名称\n if (this.settings.webDAV) {\n this.settings.webDAV.channelName = '';\n }\n }\n },\n methods: {\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/others', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysOthers.settingsSaved')));\n },\n async fetchAvailableChannels() {\n try {\n const response = await fetchWithAuth('/api/channels');\n if (response.ok) {\n this.availableChannels = await response.json();\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/others').then(response => response.json()).then(data => {\n this.settings = data;\n }).finally(() => {\n this.loading = false;\n });\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogOthers.vue?vue&type=template&id=69ae97d8&scoped=true\"\nimport script from \"./SysCogOthers.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogOthers.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogOthers.vue?vue&type=style&index=0&id=69ae97d8&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-69ae97d8\"]])\n\nexport default __exports__","import \"core-js/modules/es.array.push.js\";\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport SysConfigTabs from '@/components/config/SysConfigTabs.vue';\nimport SysCogStatus from '@/components/config/SysCogStatus.vue';\nimport SysCogUpload from '@/components/config/SysCogUpload.vue';\nimport SysCogSecurity from '@/components/config/SysCogSecurity.vue';\nimport SysCogPage from '@/components/config/SysCogPage.vue';\nimport SysCogOthers from '@/components/config/SysCogOthers.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'SystemConfig',\n mixins: [backgroundManager],\n data() {\n return {\n activeIndex: 'status',\n isSidebarCollapse: false\n };\n },\n watch: {\n // 监听锚点变化\n '$route.hash': {\n immediate: true,\n handler(newHash) {\n this.activeIndex = newHash.replace('#', '');\n window.scrollTo(0, 0); // 滚动到页面顶部\n }\n },\n activeIndex(newIndex) {\n // 更新锚点\n const hash = `#${newIndex}`;\n this.$router.push({\n hash\n });\n }\n },\n components: {\n DashboardTabs,\n SysConfigTabs,\n SysCogStatus,\n SysCogUpload,\n SysCogSecurity,\n SysCogPage,\n SysCogOthers\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n // 根据锚点动态返回对应的组件\n currentComponent() {\n const hash = this.$route.hash.replace('#', '');\n switch (hash) {\n case 'status':\n return SysCogStatus;\n case 'upload':\n return SysCogUpload;\n case 'security':\n return SysCogSecurity;\n case 'page':\n return SysCogPage;\n case 'others':\n return SysCogOthers;\n default:\n return SysCogStatus;\n }\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n // 设置默认锚点\n setDefaultHash() {\n const defaultHash = '#status'; // 默认锚点\n window.location.hash = defaultHash;\n this.activeIndex = defaultHash.replace('#', '');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n\n // 如果 URL 中没有锚点,则设置默认锚点\n if (!window.location.hash) {\n this.setDefaultHash();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SystemConfig.vue?vue&type=template&id=7e9e1ae0&scoped=true\"\nimport script from \"./SystemConfig.vue?vue&type=script&lang=js\"\nexport * from \"./SystemConfig.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/admin-common.css?vue&type=style&index=0&id=7e9e1ae0&scoped=true&lang=css&external\"\nimport \"./SystemConfig.vue?vue&type=style&index=1&id=7e9e1ae0&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7e9e1ae0\"]])\n\nexport default __exports__","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","isCollapse","ref","style","sidebarStyle","menuItems","item","key","index","activeIndex","onClick","$event","handleSelect","icon","$t","titleKey","args","toggleCollapse","name","props","type","String","default","Boolean","data","expandedWidth","computed","collapsedWidth","window","innerWidth","this","width","watch","$nextTick","measureWidth","methods","$emit","checkMobile","isMobile","el","$refs","sidebar","prevWidth","prevTransition","transition","wasCollapsed","classList","contains","remove","offsetWidth","natural","scrollWidth","add","mounted","addEventListener","beforeDestroy","removeEventListener","__exports__","_component_DashboardTabs","_component_el_tooltip","_component_el_header","_component_SysConfigTabs","activeTab","disabled","disableTooltip","content","placement","handleLogout","_","isSidebarCollapse","currentComponent","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","inputStart","inputmode","startDateLabel","onChange","handleManualInput","trim","rangeSeparator","inputEnd","endDateLabel","previousMonthLabel","goToPreviousMonth","monthTitle","nextMonthLabel","goToNextMonth","weekdayLabels","weekday","calendarDays","day","isCurrentMonth","isToday","draftStart","draftEnd","isInRange","selectDay","dayOfMonth","DAY_MS","padDatePart","value","padStart","formatDateKey","date","getFullYear","getMonth","getDate","parseDateKey","match","year","Number","month","Date","setHours","shiftMonth","amount","modelValue","Array","emits","today","displayYear","displayMonth","awaitingEnd","monthStart","start","getDay","todayKey","from","length","getTime","immediate","handler","syncFromModel","startDate","endDate","displayDate","range","commitRange","startKey","endKey","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_component_el_button","_component_el_radio_button","_component_el_radio_group","_component_DateRangeCalendar","_component_el_dialog","_component_Line","_component_Doughnut","_component_el_progress","_component_el_image","_directive_loading","systemHealthState","systemHealthLabel","currentDateLabel","greetingTitle","systemStatusSummary","datetime","currentTime","toISOString","currentTimeLabel","timeZoneLabel","fetchIndexInfo","indexInfo","totalFiles","toLocaleString","formatTime","lastUpdated","getTimeAgo","openReleases","version","circle","openTrendDateDialog","trendGroupBy","size","label","trendDatePickerVisible","title","trendDateDialogWidth","trendDateRange","handleTrendDateRangeChange","hasTrendData","uploadTrendChartData","options","lineChartOptions","Object","keys","channelStats","channelChartData","chartOptions","count","channel","background","getChartColor","getPercentage","typeStats","typeChartData","aggregatedTypeStats","status","getTypeChartColor","isProcessing","phaseDescription","Math","round","processingProgress","percentage","current","total","estimatedTimeRemaining","message","plain","cancelOperation","processingError","suggestion","recoverable","retryOperation","dismissError","loading","rebuilding","rebuildIndex","backing","backupData","accept","handleFileSelect","restoring","selectRestoreFile","newestFile","oldestFile","openFileInNewTab","isImageFile","loadErrors","src","id","fit","onError","handleImageError","isVideoFile","muted","loop","autoplay","metadata","FileName","TimeStamp","v","lim","l","h","max","min","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","a","b","c","d","e","f","hex","h1","h2","eq","isShort","r","g","hexParse","str","ret","len","alpha","hexString","undefined","HUE_RE","hsl2rgbn","s","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","rgb2hsl","calln","isArray","map","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","exec","p1","p2","rotate","deg","hslString","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","j","ok","nk","replace","parseInt","names","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","to","pow","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","charAt","Color","constructor","_rgb","_valid","valid","obj","mix","color","weight","c1","c2","w2","p","w1","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","noop","uid","isNullOrUndef","prototype","toString","call","slice","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","thisArg","apply","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","source","target","create","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","o","y","_splitKey","parts","split","part","push","_getKeyResolver","resolveObjectKey","resolver","_capitalize","toUpperCase","defined","isFunction","setsEqual","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","roundedRange","niceRange","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","describe","_fallback","_indexable","_scriptable","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","border","dash","dashOffset","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope$1","node","root","scope","Defaults","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","initial","currentStep","_refresh","_update","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","complete","progress","listen","cb","reduce","acc","_duration","cancel","animator","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","update","elapsed","wait","promises","Promise","rej","resolved","Animations","config","_properties","configure","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","anim","all","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","shift","createDatasetContext","createDataContext","dataIndex","raw","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","$bar","visibleMetas","concat","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","_defineProperty","BarController","super","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","_index_","_value_","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","useBorderRadius","borderRadius","fontColor","lineDash","lineDashOffset","lineJoin","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","abstract","DateAdapterBase","members","init","formats","diff","startOf","endOf","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","defaultRoutes","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","clipSelf","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","LineElement","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","SQRT2","yBoxTop","xBoxLeft","textDirection","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","_element","afterEvent","ci","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","animate","INTERVALS","millisecond","common","second","minute","hour","week","quarter","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","CommonProps","required","datasetIdKey","updateMode","A11yProps","ariaLabel","ariaDescribedby","Props","destroyDelay","compatProps","internals","attrs","toRawIfProxy","isProxy","toRaw","cloneProxy","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","addedDatasets","nextDataset","currentDataset","cloneData","nextData","defineComponent","setup","param","expose","slots","canvasRef","chartRef","shallowRef","renderChart","clonedData","proxiedData","Chart$1","destroyChart","onMounted","onUnmounted","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevOptions","prevLabels","prevDatasets","nextTick","deep","role","createTypedChart","registerables","reforwardRef","Doughnut","Line","BatchOperationError","code","ERROR_HANDLERS","details","NETWORK","ABORT","createError","Response","TypeError","BatchProcessor","batchSize","abortController","fetchAllRecords","includeValue","AbortController","allRecords","totalFetched","batchCount","signal","aborted","response","fetchBatch","records","nextCursor","phase","batchError","URLSearchParams","fetchWithAuth","errorDetails","errorData","json","success","totalProcessed","abort","isAborted","IndexRebuilder","chunkSize","maxRetries","retryDelay","sessionId","generateSessionId","fetchConfig","databaseType","rebuild","processor","sortByTimestampDescending","chunks","splitIntoChunks","uploadChunkWithRetry","finalize","timestampA","timestampB","chunkId","lastError","attempt","uploadChunk","sleep","checksum","calculateChecksum","headers","createHttpError","totalChunks","random","encoder","TextEncoder","dataBuffer","encode","crypto","subtle","hashBuffer","digest","hashArray","Uint8Array","imul","ms","BackupGenerator","generateBackup","packageInfo","fileCount","files","settings","record","fetchSettings","downloadBackup","settingsCount","blob","Blob","url","URL","createObjectURL","createElement","href","download","appendChild","click","removeChild","revokeObjectURL","RestoreProcessor","fileEntries","settingEntries","totalSettings","totalItems","restoredFiles","restoredSettings","failedFiles","failedSettings","fileChunks","chunkData","fromEntries","restoredCount","failedCount","settingChunks","backupTimestamp","formatDateInput","getDefaultTrendDateRange","components","DateRangeCalendar","indexInfoLoaded","indexInfoError","clockTimer","newest","oldest","channelColors","typeColors","trendColors","processingPhase","processingStartTime","currentRebuilder","currentBackupGenerator","currentRestoreProcessor","currentLocale","$i18n","indexedFileCount","uploadChannelCount","getHours","channels","DateTimeFormat","hour12","timeZone","resolvedOptions","offsetMinutes","getTimezoneOffset","absoluteMinutes","hours","minutes","stats","aggregatedStats","mappedStatus","currentTrendGroup","trend","uploadTrend","groupBy","series","trendRawLabels","trendRangeCrossesYear","years","extractTrendLabelDates","trendDisplayLabels","formatTrendAxisLabel","totalColor","hexToRgba","pointBackgroundColor","pointBorderColor","pointRadius","pointHoverRadius","getTrendColor","formatTrendSeriesName","toFixed","totalEstimated","seconds","remainingMinutes","phaseMap","setInterval","beforeUnmount","clearInterval","isOther","dates","formatSingleDate","includeYear","monthDay","endLabel","getTrendDateRangeParams","action","timezoneOffset","trendMaxPoints","trendSeriesLimit","trendStartDate","trendEndDate","$message","warning","handleProgress","handleError","errorMessage","settingsMsg","fileInput","file","$confirm","confirmButtonText","cancelButtonText","restoreData","fileContent","parseError","days","isValidPreview","FileType","open","fileName","extension","substring","imageExtensions","videoExtensions","_component_ChannelIcon","isOpen","toggleDropdown","displayLabel","selectOption","$slots","channelType","iconClass","ChannelIcon","placeholder","resolvedPlaceholder","selected","opt","handleClickOutside","$el","_component_CustomSelect","_component_el_tag","_component_el_switch","_component_el_option","_component_el_select","_component_el_form_item","_component_el_input","_component_el_input_number","_component_el_form","_component_el_descriptions_item","_component_el_descriptions","channelFilter","filterOptions","showAddDialog","filteredChannels","getChannelList","hasLoadBalance","getSettings","loadBalance","saveSettings","fixed","onMousemove","handleCardMouseMove","onMouseleave","handleCardMouseLeave","ref_for","maskText","botToken","chatId","publicUrl","bucketName","endpoint","channelId","isNitro","repo","isPrivate","baseUrl","quota","getQuotaPercentage","getQuotaStatus","getQuotaText","openDetailDialog","openEditDialog","deleteChannel","onClosed","resetAddForm","newChannel","confirmAddChannel","model","rules","addRules","onChannelTypeChange","addableChannels","ch","innerHTML","proxyUrl","cdnDomain","region","accessKeyId","secretAccessKey","pathStyle","limitGB","threshold","token","username","password","headersText","autosize","minRows","createDirectory","showDetailDialog","currentChannel","resetDetailData","openEditFromDetail","column","getChannelTypeLabel","currentChannelType","readonly","formatHeaders","link","refreshQuota","quotaLoading","isQuotaExceeded","getQuotaStatusText","showEditDialog","editChannel","resetEditData","confirmEditChannel","editRules","onQuotaEnabledChange","CustomSelect","telegramSettings","cfr2Settings","s3Settings","discordSettings","huggingfaceSettings","webdavSettings","currentChannelIndex","quotaStats","pattern","card","currentTarget","refKey","glowEl","telegram","cfr2","s3","discord","huggingface","webdav","showLength","headersToText","parseHeadersText","addForm","validate","reservedNames","isDuplicate","newChannelData","savePath","editForm","currentIndex","originalName","editedChannel","catch","getResponse","getData","loadQuotaStats","getChannelUsedGB","usedMB","usedGB","async","recalculateQuota","finally","handleClick","spin","_component_el_checkbox","_component_el_table_column","_component_el_table","_component_FloatingSaveButton","_component_el_checkbox_group","authSettings","user","userPassRules","authCode","onInput","handleUserPassInput","autocomplete","_hasPassword","clearUserPassword","handleClearUserPassword","showUserPassConfirm","confirmNewUserPassword","admin","adminPassRules","adminUsername","clearAdminPassword","adminPassword","handleAdminPassInput","handleClearAdminPassword","showAdminPassConfirm","confirmNewAdminPassword","showCreateTokenDialog","apiTokens","permissions","perm","getPermissionText","formatDate","createdAt","getTokenStatus","expiresAt","expiresText","editToken","deleteToken","tokenLoading","uploadSettings","moderate","moderateContentApiKey","nsfwApiPath","ipQuery","customApi","removeIpQueryParam","addIpQueryParam","responseFields","moveIpQueryResponseField","removeIpQueryResponseField","addIpQueryResponseField","accessSettings","allowedDomains","accessRules","whiteListMode","imageTransformEnabled","imageTransformAllowedSizes","sessionSecure","userSessionMaxAge","adminSessionMaxAge","dialogWidth","createToken","newToken","tokenRules","neverExpire","onCreateNeverExpireChange","expirationValue","expirationUnit","timeUnitOptions","labelKey","autoDelete","showEditTokenDialog","updateToken","editingToken","editTokenRules","onEditNeverExpireChange","showTokenResultDialog","createdToken","append","copyToken","SIMPLE_UNIT_MS","computeExpiresAt","baseTime","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","formatExpiresTime","isoString","getMinutes","getSeconds","expiresDate","formattedTime","FloatingSaveButton","oriUserPassword","oriAdminPassword","owner","validator","rule","urlReservedChars","hasReservedChar","char","validateSessionMaxAge","isInteger","validateImageTransformAllowedSizes","sizes","every","normalizeIpQuerySettings","fields","targetIndex","checked","permission","permissionMap","dateString","loadApiTokens","tokens","tokenForm","hasExpiration","editTokenForm","tokenId","navigator","clipboard","writeText","validationPromises","userPassForm","adminPassForm","accessForm","imageTransformForm","results","isValid","auth","upload","access","_clear","adminPasswordChanged","msg","$store","commit","$router","groupedSettings","categoryGroup","categoryName","setting","announcementManualHeight","localized","localizedOption","currentUploadChannel","currentChannelList","clearable","maxRows","onMousedown","handleAnnouncementResizeStart","refreshAnnouncement","announcementResizeMouseUpHandler","availableChannels","isEn","category","category_en","channelSetting","newVal","oldVal","channelNameSetting","newChannelList","label_en","textarea","closest","resizeHandleSize","isResizeHandle","formItem","startHeight","offsetHeight","resizedHeight","manualHeight","once","fetchAvailableChannels","axios","telemetry","cloudflareApiToken","CF_ZONE_ID","CF_EMAIL","CF_API_KEY","randomImageAPI","allowedDir","publicBrowse","webDAV","uploadChannel","webdavChannelList","channelName","mixins","backgroundManager","newHash","scrollTo","newIndex","hash","DashboardTabs","SysConfigTabs","SysCogStatus","SysCogUpload","SysCogSecurity","SysCogPage","SysCogOthers","$route","fetch","credentials","authType","setDefaultHash","defaultHash","location","initializeBackground","_typeof","iterator","toPropertyKey","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/757.27c783c1.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?351a","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?cf73","webpack://sanyue_imghub/./src/views/SystemConfig.vue?00e2","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?f721","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?7c9a","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?9c77","webpack://sanyue_imghub/./node_modules/@kurkle/color/dist/color.esm.js","webpack://sanyue_imghub/../../src/helpers/helpers.core.ts","webpack://sanyue_imghub/../../src/helpers/helpers.math.ts","webpack://sanyue_imghub/../../src/helpers/helpers.collection.ts","webpack://sanyue_imghub/../../src/helpers/helpers.extras.ts","webpack://sanyue_imghub/../../src/helpers/helpers.easing.ts","webpack://sanyue_imghub/../../src/helpers/helpers.color.ts","webpack://sanyue_imghub/../../src/core/core.animations.defaults.js","webpack://sanyue_imghub/../../src/core/core.layouts.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.intl.ts","webpack://sanyue_imghub/../../src/core/core.ticks.js","webpack://sanyue_imghub/../../src/core/core.scale.defaults.js","webpack://sanyue_imghub/../../src/core/core.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.canvas.ts","webpack://sanyue_imghub/../../src/helpers/helpers.options.ts","webpack://sanyue_imghub/../../src/helpers/helpers.config.ts","webpack://sanyue_imghub/../../src/helpers/helpers.curve.ts","webpack://sanyue_imghub/../../src/helpers/helpers.dom.ts","webpack://sanyue_imghub/../../src/helpers/helpers.interpolation.ts","webpack://sanyue_imghub/../../src/helpers/helpers.rtl.ts","webpack://sanyue_imghub/../../src/helpers/helpers.segment.js","webpack://sanyue_imghub/../../src/helpers/helpers.dataset.ts","webpack://sanyue_imghub/../src/core/core.animator.js","webpack://sanyue_imghub/../src/core/core.animation.js","webpack://sanyue_imghub/../src/core/core.animations.js","webpack://sanyue_imghub/../src/core/core.datasetController.js","webpack://sanyue_imghub/../src/controllers/controller.bar.js","webpack://sanyue_imghub/../src/controllers/controller.bubble.js","webpack://sanyue_imghub/../src/controllers/controller.doughnut.js","webpack://sanyue_imghub/../src/controllers/controller.line.js","webpack://sanyue_imghub/../src/controllers/controller.polarArea.js","webpack://sanyue_imghub/../src/controllers/controller.pie.js","webpack://sanyue_imghub/../src/controllers/controller.radar.js","webpack://sanyue_imghub/../src/controllers/controller.scatter.js","webpack://sanyue_imghub/../src/core/core.adapters.ts","webpack://sanyue_imghub/../src/core/core.interaction.js","webpack://sanyue_imghub/../src/core/core.layouts.js","webpack://sanyue_imghub/../src/platform/platform.base.js","webpack://sanyue_imghub/../src/platform/platform.basic.js","webpack://sanyue_imghub/../src/platform/platform.dom.js","webpack://sanyue_imghub/../src/platform/index.js","webpack://sanyue_imghub/../src/core/core.element.ts","webpack://sanyue_imghub/../src/core/core.scale.autoskip.js","webpack://sanyue_imghub/../src/core/core.scale.js","webpack://sanyue_imghub/../src/core/core.typedRegistry.js","webpack://sanyue_imghub/../src/core/core.registry.js","webpack://sanyue_imghub/../src/core/core.plugins.js","webpack://sanyue_imghub/../src/core/core.config.js","webpack://sanyue_imghub/../src/core/core.controller.js","webpack://sanyue_imghub/../src/elements/element.arc.ts","webpack://sanyue_imghub/../src/elements/element.line.js","webpack://sanyue_imghub/../src/elements/element.point.ts","webpack://sanyue_imghub/../src/elements/element.bar.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.segment.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.helper.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.options.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.stack.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/simpleArc.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.drawing.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/index.js","webpack://sanyue_imghub/../src/plugins/plugin.legend.js","webpack://sanyue_imghub/../src/plugins/plugin.subtitle.js","webpack://sanyue_imghub/../src/plugins/plugin.tooltip.js","webpack://sanyue_imghub/../src/scales/scale.category.js","webpack://sanyue_imghub/../src/scales/scale.linearbase.js","webpack://sanyue_imghub/../src/scales/scale.linear.js","webpack://sanyue_imghub/../src/scales/scale.logarithmic.js","webpack://sanyue_imghub/../src/scales/scale.radialLinear.js","webpack://sanyue_imghub/../src/scales/scale.time.js","webpack://sanyue_imghub/../src/scales/scale.timeseries.js","webpack://sanyue_imghub/../src/props.ts","webpack://sanyue_imghub/../src/utils.ts","webpack://sanyue_imghub/../src/chart.ts","webpack://sanyue_imghub/../src/typedCharts.ts","webpack://sanyue_imghub/./src/utils/batchProcessor.js","webpack://sanyue_imghub/./src/utils/indexRebuilder.js","webpack://sanyue_imghub/./src/utils/backupGenerator.js","webpack://sanyue_imghub/./src/utils/restoreProcessor.js","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?ce78","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?189e","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?1e7e","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?f46d","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?a7b6","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?2ea5","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?45e6","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?b758","webpack://sanyue_imghub/./src/utils/tokenExpiration.js","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?3739","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?ab49","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?4209","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?c551","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?780f","webpack://sanyue_imghub/./src/views/SystemConfig.vue","webpack://sanyue_imghub/./src/views/SystemConfig.vue?d269","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?3436","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05"],"sourcesContent":["import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"menu-list\"\n};\nconst _hoisted_2 = [\"onClick\"];\nconst _hoisted_3 = {\n class: \"menu-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"sidebar-container\", {\n 'is-collapsed': $props.isCollapse\n }]),\n ref: \"sidebar\",\n style: _normalizeStyle($options.sidebarStyle)\n }, [_createElementVNode(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.menuItems, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.index,\n class: _normalizeClass([\"menu-item\", {\n 'is-active': $props.activeIndex === item.index\n }]),\n onClick: $event => $options.handleSelect(item.index)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: item.icon,\n class: \"menu-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(item.titleKey)), 1)], 10, _hoisted_2);\n }), 128))]), _createElementVNode(\"div\", {\n class: \"toggle-button\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleCollapse && $options.toggleCollapse(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $props.isCollapse ? 'angle-double-right' : 'angle-double-left'\n }, null, 8, [\"icon\"])])], 6);\n}","export default {\n name: 'SysConfigTabs',\n props: {\n activeIndex: {\n type: String,\n default: 'status'\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n expandedWidth: null,\n menuItems: [{\n index: 'status',\n icon: 'chart-bar',\n titleKey: 'sysConfigTabs.systemStatus'\n }, {\n index: 'upload',\n icon: 'cloud-upload',\n titleKey: 'sysConfigTabs.uploadSettings'\n }, {\n index: 'security',\n icon: 'shield',\n titleKey: 'sysConfigTabs.securitySettings'\n }, {\n index: 'page',\n icon: 'pager',\n titleKey: 'sysConfigTabs.pageSettings'\n }, {\n index: 'others',\n icon: 'cog',\n titleKey: 'sysConfigTabs.otherSettings'\n }]\n };\n },\n computed: {\n collapsedWidth() {\n return window.innerWidth <= 768 ? 50 : 56;\n },\n sidebarStyle() {\n if (this.isCollapse) {\n return {\n width: this.collapsedWidth + 'px'\n };\n }\n return this.expandedWidth ? {\n width: this.expandedWidth + 'px'\n } : {};\n }\n },\n watch: {\n '$i18n.locale'() {\n this.$nextTick(() => this.measureWidth());\n }\n },\n methods: {\n toggleCollapse() {\n this.$emit('update:isCollapse', !this.isCollapse);\n },\n checkMobile() {\n const isMobile = window.innerWidth <= 768;\n this.$emit('update:isCollapse', isMobile);\n },\n handleSelect(index) {\n this.$emit('update:activeIndex', index);\n },\n measureWidth() {\n const el = this.$refs.sidebar;\n if (!el) return;\n // Temporarily expand to measure natural content width\n const prevWidth = el.style.width;\n const prevTransition = el.style.transition;\n const wasCollapsed = el.classList.contains('is-collapsed');\n el.style.transition = 'none';\n if (wasCollapsed) {\n el.classList.remove('is-collapsed');\n }\n el.style.width = 'auto';\n // Force reflow to apply changes\n void el.offsetWidth;\n const natural = el.scrollWidth;\n // Restore original state\n el.style.width = prevWidth;\n if (wasCollapsed) {\n el.classList.add('is-collapsed');\n }\n void el.offsetWidth;\n el.style.transition = prevTransition;\n this.expandedWidth = natural;\n }\n },\n mounted() {\n this.checkMobile();\n this.$nextTick(() => this.measureWidth());\n window.addEventListener('resize', this.checkMobile);\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.checkMobile);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysConfigTabs.vue?vue&type=template&id=418ec867&scoped=true\"\nimport script from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\nexport * from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\n\nimport \"./SysConfigTabs.vue?vue&type=style&index=0&id=418ec867&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-418ec867\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content admin-header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_SysConfigTabs = _resolveComponent(\"SysConfigTabs\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"systemConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_SysConfigTabs, {\n activeIndex: $data.activeIndex,\n \"onUpdate:activeIndex\": _cache[0] || (_cache[0] = $event => $data.activeIndex = $event),\n isCollapse: $data.isSidebarCollapse,\n \"onUpdate:isCollapse\": _cache[1] || (_cache[1] = $event => $data.isSidebarCollapse = $event)\n }, null, 8, [\"activeIndex\", \"isCollapse\"]), (_openBlock(), _createBlock(_resolveDynamicComponent($options.currentComponent), {\n class: _normalizeClass(['main-container', {\n 'collapsed': $data.isSidebarCollapse\n }])\n }, null, 8, [\"class\"]))]);\n}","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"date-range-calendar\"\n};\nconst _hoisted_2 = {\n class: \"selected-range\"\n};\nconst _hoisted_3 = {\n class: \"selected-range-inputs\"\n};\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n class: \"date-range-separator\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n class: \"calendar-header\"\n};\nconst _hoisted_8 = [\"aria-label\"];\nconst _hoisted_9 = {\n class: \"calendar-title\"\n};\nconst _hoisted_10 = [\"aria-label\"];\nconst _hoisted_11 = {\n class: \"calendar-weekdays\"\n};\nconst _hoisted_12 = {\n class: \"calendar-grid\"\n};\nconst _hoisted_13 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputStart = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.startDateLabel,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_4), [[_vModelText, $data.inputStart, void 0, {\n trim: true\n }]]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.rangeSeparator), 1), _withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.inputEnd = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.endDateLabel,\n onChange: _cache[3] || (_cache[3] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_6), [[_vModelText, $data.inputEnd, void 0, {\n trim: true\n }]])])]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.previousMonthLabel,\n onClick: _cache[4] || (_cache[4] = (...args) => $options.goToPreviousMonth && $options.goToPreviousMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-left\"\n })], 8, _hoisted_8), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.monthTitle), 1), _createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.nextMonthLabel,\n onClick: _cache[5] || (_cache[5] = (...args) => $options.goToNextMonth && $options.goToNextMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-right\"\n })], 8, _hoisted_10)]), _createElementVNode(\"div\", _hoisted_11, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.weekdayLabels, weekday => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: weekday\n }, _toDisplayString(weekday), 1);\n }), 128))]), _createElementVNode(\"div\", _hoisted_12, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.calendarDays, day => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: day.key,\n type: \"button\",\n class: _normalizeClass([\"calendar-day\", {\n 'is-muted': !day.isCurrentMonth,\n 'is-today': day.isToday,\n 'is-range-start': day.key === $data.draftStart,\n 'is-range-end': day.key === $data.draftEnd,\n 'is-in-range': $options.isInRange(day.key)\n }]),\n onClick: $event => $options.selectDay(day.key)\n }, _toDisplayString(day.dayOfMonth), 11, _hoisted_13);\n }), 128))])]);\n}","const DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateKey(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction parseDateKey(value) {\n if (typeof value !== 'string') return null;\n const match = value.trim().match(/^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})$/);\n if (!match) return null;\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = new Date(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction shiftMonth(date, amount) {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\nexport default {\n name: 'DateRangeCalendar',\n props: {\n modelValue: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return {\n displayYear: today.getFullYear(),\n displayMonth: today.getMonth(),\n draftStart: '',\n draftEnd: '',\n inputStart: '',\n inputEnd: '',\n awaitingEnd: false\n };\n },\n computed: {\n previousMonthLabel() {\n return this.$t('dateRangeCalendar.previousMonth');\n },\n nextMonthLabel() {\n return this.$t('dateRangeCalendar.nextMonth');\n },\n startDateLabel() {\n return this.$t('dateRangeCalendar.startDate');\n },\n endDateLabel() {\n return this.$t('dateRangeCalendar.endDate');\n },\n rangeSeparator() {\n return this.$t('dateRangeCalendar.rangeSeparator');\n },\n monthTitle() {\n return this.$t('dateRangeCalendar.monthTitle', {\n year: this.displayYear,\n month: padDatePart(this.displayMonth + 1)\n });\n },\n weekdayLabels() {\n return [this.$t('dateRangeCalendar.weekdaySun'), this.$t('dateRangeCalendar.weekdayMon'), this.$t('dateRangeCalendar.weekdayTue'), this.$t('dateRangeCalendar.weekdayWed'), this.$t('dateRangeCalendar.weekdayThu'), this.$t('dateRangeCalendar.weekdayFri'), this.$t('dateRangeCalendar.weekdaySat')];\n },\n calendarDays() {\n const monthStart = new Date(this.displayYear, this.displayMonth, 1);\n const start = new Date(this.displayYear, this.displayMonth, 1 - monthStart.getDay());\n const todayKey = formatDateKey(new Date());\n return Array.from({\n length: 42\n }, (_, index) => {\n const date = new Date(start.getTime() + index * DAY_MS);\n const key = formatDateKey(date);\n return {\n key,\n dayOfMonth: date.getDate(),\n isCurrentMonth: date.getMonth() === this.displayMonth,\n isToday: key === todayKey\n };\n });\n }\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(value) {\n this.syncFromModel(value);\n }\n }\n },\n methods: {\n syncFromModel(value) {\n const startDate = parseDateKey(value?.[0]);\n const endDate = parseDateKey(value?.[1]);\n this.draftStart = startDate ? formatDateKey(startDate) : '';\n this.draftEnd = endDate ? formatDateKey(endDate) : '';\n this.inputStart = this.draftStart;\n this.inputEnd = this.draftEnd;\n this.awaitingEnd = false;\n const displayDate = startDate || endDate;\n if (displayDate) {\n this.displayYear = displayDate.getFullYear();\n this.displayMonth = displayDate.getMonth();\n }\n },\n goToPreviousMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), -1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n goToNextMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), 1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n selectDay(key) {\n if (!this.draftStart || this.draftEnd || !this.awaitingEnd) {\n this.draftStart = key;\n this.draftEnd = '';\n this.inputStart = key;\n this.inputEnd = '';\n this.awaitingEnd = true;\n return;\n }\n const range = key < this.draftStart ? [key, this.draftStart] : [this.draftStart, key];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.commitRange(range);\n },\n handleManualInput() {\n const startDate = parseDateKey(this.inputStart);\n const endDate = parseDateKey(this.inputEnd);\n if (!startDate || !endDate) return;\n const startKey = formatDateKey(startDate);\n const endKey = formatDateKey(endDate);\n const range = startKey <= endKey ? [startKey, endKey] : [endKey, startKey];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.displayYear = startDate.getFullYear();\n this.displayMonth = startDate.getMonth();\n this.commitRange(range);\n },\n commitRange(range) {\n this.$emit('update:modelValue', range);\n this.$emit('change', range);\n },\n isInRange(key) {\n return Boolean(this.draftStart && this.draftEnd && key > this.draftStart && key < this.draftEnd);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DateRangeCalendar.vue?vue&type=template&id=5fbe496c&scoped=true\"\nimport script from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\nexport * from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\n\nimport \"./DateRangeCalendar.vue?vue&type=style&index=0&id=5fbe496c&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5fbe496c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"status-panel\"\n};\nconst _hoisted_2 = [\"aria-label\"];\nconst _hoisted_3 = {\n class: \"status-hero-copy\"\n};\nconst _hoisted_4 = {\n class: \"status-hero-kicker\"\n};\nconst _hoisted_5 = {\n class: \"system-health-badge\",\n \"aria-live\": \"polite\"\n};\nconst _hoisted_6 = {\n class: \"status-hero-date\"\n};\nconst _hoisted_7 = {\n class: \"status-hero-title\"\n};\nconst _hoisted_8 = {\n class: \"status-hero-summary\",\n \"aria-live\": \"polite\"\n};\nconst _hoisted_9 = {\n class: \"status-hero-time-card\"\n};\nconst _hoisted_10 = {\n class: \"status-hero-time-caption\"\n};\nconst _hoisted_11 = [\"datetime\"];\nconst _hoisted_12 = {\n class: \"status-hero-timezone\"\n};\nconst _hoisted_13 = {\n class: \"overview-cards\"\n};\nconst _hoisted_14 = {\n class: \"card-icon\"\n};\nconst _hoisted_15 = {\n class: \"card-content\"\n};\nconst _hoisted_16 = {\n class: \"card-title\"\n};\nconst _hoisted_17 = {\n class: \"card-value\"\n};\nconst _hoisted_18 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_19 = {\n class: \"overview-card index-status\"\n};\nconst _hoisted_20 = {\n class: \"card-icon\"\n};\nconst _hoisted_21 = {\n class: \"card-content\"\n};\nconst _hoisted_22 = {\n class: \"card-title\"\n};\nconst _hoisted_23 = {\n class: \"card-value\"\n};\nconst _hoisted_24 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_25 = {\n class: \"card-icon\"\n};\nconst _hoisted_26 = {\n class: \"card-content\"\n};\nconst _hoisted_27 = {\n class: \"card-title\"\n};\nconst _hoisted_28 = {\n class: \"card-value\"\n};\nconst _hoisted_29 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_30 = {\n class: \"charts-section\"\n};\nconst _hoisted_31 = {\n class: \"chart-card trend-chart-card\"\n};\nconst _hoisted_32 = {\n class: \"chart-header trend-chart-header\"\n};\nconst _hoisted_33 = {\n class: \"chart-title\"\n};\nconst _hoisted_34 = {\n class: \"trend-controls\"\n};\nconst _hoisted_35 = {\n class: \"trend-date-panel\"\n};\nconst _hoisted_36 = {\n class: \"chart-content trend-chart-content\"\n};\nconst _hoisted_37 = {\n key: 0,\n class: \"empty-state trend-empty-state\"\n};\nconst _hoisted_38 = {\n key: 1,\n class: \"line-chart-wrapper\"\n};\nconst _hoisted_39 = {\n class: \"chart-card\"\n};\nconst _hoisted_40 = {\n class: \"chart-header\"\n};\nconst _hoisted_41 = {\n class: \"chart-content\"\n};\nconst _hoisted_42 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_43 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_44 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_45 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_46 = {\n class: \"center-value\"\n};\nconst _hoisted_47 = {\n class: \"center-label\"\n};\nconst _hoisted_48 = {\n class: \"chart-legend\"\n};\nconst _hoisted_49 = {\n class: \"legend-label\"\n};\nconst _hoisted_50 = {\n class: \"legend-value\"\n};\nconst _hoisted_51 = {\n class: \"legend-percent\"\n};\nconst _hoisted_52 = {\n class: \"chart-card\"\n};\nconst _hoisted_53 = {\n class: \"chart-header\"\n};\nconst _hoisted_54 = {\n class: \"chart-content\"\n};\nconst _hoisted_55 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_56 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_57 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_58 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_59 = {\n class: \"center-value\"\n};\nconst _hoisted_60 = {\n class: \"center-label\"\n};\nconst _hoisted_61 = {\n class: \"chart-legend\"\n};\nconst _hoisted_62 = {\n class: \"legend-label\"\n};\nconst _hoisted_63 = {\n class: \"legend-value\"\n};\nconst _hoisted_64 = {\n class: \"legend-percent\"\n};\nconst _hoisted_65 = {\n class: \"actions-section\"\n};\nconst _hoisted_66 = {\n class: \"action-card\"\n};\nconst _hoisted_67 = {\n class: \"action-header\"\n};\nconst _hoisted_68 = {\n class: \"action-content\"\n};\nconst _hoisted_69 = {\n key: 0,\n class: \"progress-container\"\n};\nconst _hoisted_70 = {\n class: \"progress-header\"\n};\nconst _hoisted_71 = {\n class: \"progress-phase\"\n};\nconst _hoisted_72 = {\n class: \"progress-percentage\"\n};\nconst _hoisted_73 = {\n class: \"progress-details\"\n};\nconst _hoisted_74 = {\n key: 0,\n class: \"progress-count\"\n};\nconst _hoisted_75 = {\n key: 1,\n class: \"progress-time\"\n};\nconst _hoisted_76 = {\n key: 0,\n class: \"progress-message\"\n};\nconst _hoisted_77 = {\n key: 1,\n class: \"error-container\"\n};\nconst _hoisted_78 = {\n class: \"error-icon\"\n};\nconst _hoisted_79 = {\n class: \"error-content\"\n};\nconst _hoisted_80 = {\n class: \"error-message\"\n};\nconst _hoisted_81 = {\n key: 0,\n class: \"error-suggestion\"\n};\nconst _hoisted_82 = {\n class: \"error-actions\"\n};\nconst _hoisted_83 = {\n key: 2,\n class: \"action-buttons\"\n};\nconst _hoisted_84 = {\n class: \"restore-section\"\n};\nconst _hoisted_85 = {\n key: 0,\n class: \"file-info-section\"\n};\nconst _hoisted_86 = [\"src\"];\nconst _hoisted_87 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_88 = {\n class: \"file-card-header\"\n};\nconst _hoisted_89 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_90 = {\n class: \"file-name\"\n};\nconst _hoisted_91 = {\n class: \"file-meta\"\n};\nconst _hoisted_92 = [\"src\"];\nconst _hoisted_93 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_94 = {\n class: \"file-card-header warning\"\n};\nconst _hoisted_95 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_96 = {\n class: \"file-name\"\n};\nconst _hoisted_97 = {\n class: \"file-meta\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_DateRangeCalendar = _resolveComponent(\"DateRangeCalendar\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_Line = _resolveComponent(\"Line\");\n const _component_Doughnut = _resolveComponent(\"Doughnut\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"section\", {\n class: _normalizeClass([\"status-hero\", `is-${$options.systemHealthState}`]),\n \"aria-label\": _ctx.$t('sysStatus.systemOverview')\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"span\", _hoisted_5, [_cache[12] || (_cache[12] = _createElementVNode(\"span\", {\n class: \"system-health-dot\",\n \"aria-hidden\": \"true\"\n }, null, -1)), _createTextVNode(\" \" + _toDisplayString($options.systemHealthLabel), 1)]), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.currentDateLabel), 1)]), _createElementVNode(\"h1\", _hoisted_7, _toDisplayString($options.greetingTitle), 1), _createElementVNode(\"p\", _hoisted_8, _toDisplayString($options.systemStatusSummary), 1)]), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('sysStatus.localTime')), 1), _createElementVNode(\"time\", {\n class: \"status-hero-time\",\n datetime: $data.currentTime.toISOString()\n }, _toDisplayString($options.currentTimeLabel), 9, _hoisted_11), _createElementVNode(\"span\", _hoisted_12, _toDisplayString($options.timeZoneLabel), 1)])], 10, _hoisted_2), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", {\n class: \"overview-card total-files\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.fetchIndexInfo && $options.fetchIndexInfo(...args))\n }, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\"\n })]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, _toDisplayString(_ctx.$t('sysStatus.totalFiles')), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('sysStatus.clickToRefresh')), 1)])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n })]), _createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t('sysStatus.indexUpdateTime')), 1), _createElementVNode(\"div\", _hoisted_23, _toDisplayString($options.formatTime($data.indexInfo.lastUpdated)), 1), _createElementVNode(\"div\", _hoisted_24, _toDisplayString($options.getTimeAgo($data.indexInfo.lastUpdated)), 1)])]), _createElementVNode(\"div\", {\n class: \"overview-card system-version\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.openReleases && $options.openReleases(...args))\n }, [_createElementVNode(\"div\", _hoisted_25, [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\"\n })]), _createElementVNode(\"div\", _hoisted_26, [_createElementVNode(\"div\", _hoisted_27, _toDisplayString(_ctx.$t('sysStatus.systemVersion')), 1), _createElementVNode(\"div\", _hoisted_28, \"v\" + _toDisplayString($data.version), 1), _createElementVNode(\"div\", _hoisted_29, _toDisplayString(_ctx.$t('sysStatus.clickToViewChangelog')), 1)])])]), _createElementVNode(\"div\", _hoisted_30, [_createElementVNode(\"div\", _hoisted_31, [_createElementVNode(\"div\", _hoisted_32, [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_font_awesome_icon, {\n icon: \"chart-line\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.uploadTrend')), 1), _createVNode(_component_el_button, {\n class: \"trend-calendar-btn\",\n circle: \"\",\n \"aria-label\": _ctx.$t('sysStatus.selectDateRange'),\n onClick: $options.openTrendDateDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"calendar\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_radio_group, {\n modelValue: $data.trendGroupBy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.trendGroupBy = $event),\n size: \"small\",\n class: \"trend-group-switch\",\n \"aria-label\": _ctx.$t('sysStatus.uploadTrendGroupBy')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"channel\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelType')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"channelName\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelName')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\"])])]), _createVNode(_component_el_dialog, {\n modelValue: $data.trendDatePickerVisible,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.trendDatePickerVisible = $event),\n title: _ctx.$t('sysStatus.selectDateRange'),\n width: $options.trendDateDialogWidth,\n class: \"trend-date-dialog\",\n \"align-center\": \"\",\n \"append-to-body\": \"\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_DateRangeCalendar, {\n modelValue: $data.trendDateRange,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.trendDateRange = $event),\n onChange: $options.handleTrendDateRangeChange\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createElementVNode(\"div\", _hoisted_36, [!$options.hasTrendData ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [_createVNode(_component_Line, {\n data: $options.uploadTrendChartData,\n options: $options.lineChartOptions\n }, null, 8, [\"data\", \"options\"])]))])]), _createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_font_awesome_icon, {\n icon: \"share-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.channelDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_41, [Object.keys($data.indexInfo.channelStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_42, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_43, [_createElementVNode(\"div\", _hoisted_44, [_createVNode(_component_Doughnut, {\n data: $options.channelChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_45, [_createElementVNode(\"div\", _hoisted_46, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_47, _toDisplayString(_ctx.$t('sysStatus.totalFilesLabel')), 1)])]), _createElementVNode(\"div\", _hoisted_48, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.indexInfo.channelStats, (count, channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_49, _toDisplayString(channel), 1), _createElementVNode(\"span\", _hoisted_50, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_51, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])]), _createElementVNode(\"div\", _hoisted_52, [_createElementVNode(\"div\", _hoisted_53, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.fileStatusDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_54, [Object.keys($data.indexInfo.typeStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_55, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_56, [_createElementVNode(\"div\", _hoisted_57, [_createVNode(_component_Doughnut, {\n data: $options.typeChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_58, [_createElementVNode(\"div\", _hoisted_59, _toDisplayString(Object.keys($data.indexInfo.typeStats).length), 1), _createElementVNode(\"div\", _hoisted_60, _toDisplayString(_ctx.$t('sysStatus.statusTypes')), 1)])]), _createElementVNode(\"div\", _hoisted_61, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.aggregatedTypeStats, (count, status, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: status,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getTypeChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_62, _toDisplayString(status), 1), _createElementVNode(\"span\", _hoisted_63, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_64, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])])]), _createElementVNode(\"div\", _hoisted_65, [_createElementVNode(\"div\", _hoisted_66, [_createElementVNode(\"div\", _hoisted_67, [_createVNode(_component_font_awesome_icon, {\n icon: \"tools\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.systemMaintenance')), 1)]), _createElementVNode(\"div\", _hoisted_68, [$data.isProcessing ? (_openBlock(), _createElementBlock(\"div\", _hoisted_69, [_createElementVNode(\"div\", _hoisted_70, [_createElementVNode(\"span\", _hoisted_71, _toDisplayString($options.phaseDescription), 1), _createElementVNode(\"span\", _hoisted_72, _toDisplayString(Math.round($data.processingProgress.percentage)) + \"%\", 1)]), _createVNode(_component_el_progress, {\n percentage: $data.processingProgress.percentage,\n \"stroke-width\": 12,\n \"show-text\": false,\n class: \"progress-bar\"\n }, null, 8, [\"percentage\"]), _createElementVNode(\"div\", _hoisted_73, [$data.processingProgress.current > 0 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_74, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.processingProgress.current.toLocaleString()) + \" \", 1), $data.processingProgress.total > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createTextVNode(\" / \" + _toDisplayString($data.processingProgress.total.toLocaleString()), 1)], 64)) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.records')), 1)])) : _createCommentVNode(\"\", true), $options.estimatedTimeRemaining ? (_openBlock(), _createElementBlock(\"span\", _hoisted_75, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n }), _createTextVNode(\" \" + _toDisplayString($options.estimatedTimeRemaining), 1)])) : _createCommentVNode(\"\", true)]), $data.processingProgress.message ? (_openBlock(), _createElementBlock(\"div\", _hoisted_76, _toDisplayString($data.processingProgress.message), 1)) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n size: \"small\",\n onClick: $options.cancelOperation,\n class: \"cancel-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.cancelOperation')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : $data.processingError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_77, [_createElementVNode(\"div\", _hoisted_78, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\"\n })]), _createElementVNode(\"div\", _hoisted_79, [_createElementVNode(\"div\", _hoisted_80, _toDisplayString($data.processingError.message), 1), $data.processingError.suggestion ? (_openBlock(), _createElementBlock(\"div\", _hoisted_81, _toDisplayString($data.processingError.suggestion), 1)) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_82, [$data.processingError.recoverable ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n size: \"small\",\n onClick: $options.retryOperation\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"default\",\n size: \"small\",\n onClick: $options.dismissError\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_83, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.rebuildTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.rebuilding,\n disabled: $data.isProcessing,\n onClick: $options.rebuildIndex,\n class: \"action-btn rebuild-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.rebuilding ? _ctx.$t('sysStatus.rebuilding') : _ctx.$t('sysStatus.rebuildIndex')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.backupTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"success\",\n loading: $data.backing,\n disabled: $data.isProcessing,\n onClick: $options.backupData,\n class: \"action-btn backup-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n }), _createTextVNode(\" \" + _toDisplayString($data.backing ? _ctx.$t('sysStatus.backingUp') : _ctx.$t('sysStatus.backupData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.restoreTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_84, [_createElementVNode(\"input\", {\n type: \"file\",\n ref: \"fileInput\",\n accept: \".json\",\n onChange: _cache[5] || (_cache[5] = (...args) => $options.handleFileSelect && $options.handleFileSelect(...args)),\n style: {\n \"display\": \"none\"\n }\n }, null, 544), _createVNode(_component_el_button, {\n type: \"warning\",\n loading: $data.restoring,\n disabled: $data.isProcessing,\n onClick: $options.selectRestoreFile,\n class: \"action-btn restore-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"upload\"\n }), _createTextVNode(\" \" + _toDisplayString($data.restoring ? _ctx.$t('sysStatus.restoring') : _ctx.$t('sysStatus.restoreData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])])]),\n _: 1\n }, 8, [\"content\"])]))])])]), $data.indexInfo.newestFile || $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", _hoisted_85, [$data.indexInfo.newestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"file-info-card info-card-newest\",\n onClick: _cache[8] || (_cache[8] = $event => $options.openFileInNewTab($data.indexInfo.newestFile))\n }, [$options.isImageFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[6] || (_cache[6] = $event => $options.handleImageError('newest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[7] || (_cache[7] = $event => $options.handleImageError('newest'))\n }, null, 40, _hoisted_86)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_87, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_88, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.latestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_89, [_createElementVNode(\"div\", _hoisted_90, _toDisplayString($data.indexInfo.newestFile.metadata?.FileName || $data.indexInfo.newestFile.id), 1), _createElementVNode(\"div\", _hoisted_91, _toDisplayString($options.formatTime($data.indexInfo.newestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true), $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-info-card info-card-oldest\",\n onClick: _cache[11] || (_cache[11] = $event => $options.openFileInNewTab($data.indexInfo.oldestFile))\n }, [$options.isImageFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[9] || (_cache[9] = $event => $options.handleImageError('oldest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[10] || (_cache[10] = $event => $options.handleImageError('oldest'))\n }, null, 40, _hoisted_92)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_93, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_94, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.earliestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_95, [_createElementVNode(\"div\", _hoisted_96, _toDisplayString($data.indexInfo.oldestFile.metadata?.FileName || $data.indexInfo.oldestFile.id), 1), _createElementVNode(\"div\", _hoisted_97, _toDisplayString($options.formatTime($data.indexInfo.oldestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)])), [[_directive_loading, $data.loading]]);\n}","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, vScale, _parsed} = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = (_parsed\n .slice(0, start + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = (_parsed\n .slice(end - 1)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n if (!ctx && !canvas) {\n return;\n }\n\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy,\n context: AnyObject,\n subProxy?: ResolverProxy,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart | PrivateChart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart | PrivateChart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n\n (chart as PrivateChart).height = round1(chart.height);\n (chart as PrivateChart).width = round1(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n\n if (!found && !options.all) {\n return 0;\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n const {iScale, vScale} = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n const skipNull = (meta) => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n _getAxisCount() {\n return this._getAxis().length;\n }\n\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(\n this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n )] = true;\n }\n return Object.keys(axis);\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: string): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: string): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options?: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase as {\n new (options?: AnyObject): DateAdapter;\n override(\n members: Partial, 'options'>>\n ): void;\n }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {vScale} = controller._cachedMeta;\n const {_parsed} = metaset;\n\n const distanceToDefinedLo = (_parsed\n .slice(0, result.lo + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.lo -= Math.max(0, distanceToDefinedLo);\n\n const distanceToDefinedHi = (_parsed\n .slice(result.hi)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

(props: P, final?: boolean): Pick;\n getProps

(props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = undefined;\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n if (this._init === undefined) { // Do not trigger events before install\n return;\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined; // Do not trigger events after uninstall\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n // Unset pending resize request now to avoid possible recursion within _resize\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n // @ts-expect-error\n const clip = getDatasetClipArea(this, meta);\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (clip) {\n clipArea(ctx, clip);\n }\n\n meta.controller.draw();\n\n if (clip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the event inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of a segment -> need to add another point before this,\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of a segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {chart, index, line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale, clip} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {line, target, color: below, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale, clip} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n\n ctx.beginPath();\n\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { PropType } from 'vue'\nimport type {\n ChartType,\n ChartData,\n ChartOptions,\n Plugin,\n UpdateMode\n} from 'chart.js'\n\nexport const CommonProps = {\n data: {\n type: Object as PropType,\n required: true\n },\n options: {\n type: Object as PropType,\n default: () => ({})\n },\n plugins: {\n type: Array as PropType,\n default: () => []\n },\n datasetIdKey: {\n type: String,\n default: 'label'\n },\n updateMode: {\n type: String as PropType,\n default: undefined\n }\n} as const\n\nexport const A11yProps = {\n ariaLabel: {\n type: String\n },\n ariaDescribedby: {\n type: String\n }\n} as const\n\nexport const Props = {\n type: {\n type: String as PropType,\n required: true\n },\n destroyDelay: {\n type: Number,\n default: 0 // No delay by default\n },\n ...CommonProps,\n ...A11yProps\n} as const\n","import { isProxy, toRaw, version } from 'vue'\nimport type {\n Chart,\n ChartType,\n ChartData,\n ChartDataset,\n ChartOptions,\n DefaultDataPoint\n} from 'chart.js'\n\nexport const compatProps =\n version[0] === '2'\n ? (internals: I, props: T) =>\n Object.assign(internals, { attrs: props }) as unknown as I & T\n : (internals: I, props: T) =>\n Object.assign(internals, props)\n\nexport function toRawIfProxy(obj: T) {\n return isProxy(obj) ? toRaw(obj) : obj\n}\n\nexport function cloneProxy(obj: T, src = obj) {\n return isProxy(src) ? new Proxy(obj, {}) : obj\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(chart: Chart, nextOptions: ChartOptions) {\n const options = chart.options\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions)\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextDatasets: ChartDataset[],\n datasetIdKey: string\n) {\n const addedDatasets: ChartDataset[] = []\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n )\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset\n }\n\n addedDatasets.push(currentDataset)\n\n Object.assign(currentDataset, nextDataset)\n\n return currentDataset\n }\n )\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(data: ChartData, datasetIdKey: string) {\n const nextData: ChartData = {\n labels: [],\n datasets: []\n }\n\n setLabels(nextData, data.labels)\n setDatasets(nextData, data.datasets, datasetIdKey)\n\n return nextData\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'dataset',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'nearest',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'index',\n { intersect: true },\n false\n )\n}\n","import { Chart as ChartJS } from 'chart.js'\nimport {\n defineComponent,\n h,\n nextTick,\n onUnmounted,\n onMounted,\n ref,\n shallowRef,\n toRaw,\n watch\n} from 'vue'\n\nimport type { ChartComponent } from './types.js'\nimport { Props } from './props.js'\nimport {\n cloneData,\n setLabels,\n setDatasets,\n setOptions,\n toRawIfProxy,\n cloneProxy\n} from './utils.js'\n\nexport const Chart = defineComponent({\n props: Props,\n setup(props, { expose, slots }) {\n const canvasRef = ref(null)\n const chartRef = shallowRef(null)\n\n expose({ chart: chartRef })\n\n const renderChart = () => {\n if (!canvasRef.value) return\n\n const { type, data, options, plugins, datasetIdKey } = props\n const clonedData = cloneData(data, datasetIdKey)\n const proxiedData = cloneProxy(clonedData, data)\n\n chartRef.value = new ChartJS(canvasRef.value, {\n type,\n data: proxiedData,\n options: { ...options },\n plugins\n })\n }\n\n const destroyChart = () => {\n const chart = toRaw(chartRef.value)\n\n if (chart) {\n if (props.destroyDelay > 0) {\n setTimeout(() => {\n chart.destroy()\n chartRef.value = null\n }, props.destroyDelay)\n } else {\n chart.destroy()\n chartRef.value = null\n }\n }\n }\n\n const update = (chart: ChartJS) => {\n chart.update(props.updateMode)\n }\n\n onMounted(renderChart)\n\n onUnmounted(destroyChart)\n\n watch(\n [() => props.options, () => props.data],\n (\n [nextOptionsProxy, nextDataProxy],\n [prevOptionsProxy, prevDataProxy]\n ) => {\n const chart = toRaw(chartRef.value)\n\n if (!chart) {\n return\n }\n\n let shouldUpdate = false\n\n if (nextOptionsProxy) {\n const nextOptions = toRawIfProxy(nextOptionsProxy)\n const prevOptions = toRawIfProxy(prevOptionsProxy)\n\n if (nextOptions && nextOptions !== prevOptions) {\n setOptions(chart, nextOptions)\n shouldUpdate = true\n }\n }\n\n if (nextDataProxy) {\n const nextLabels = toRawIfProxy(nextDataProxy.labels)\n const prevLabels = toRawIfProxy(prevDataProxy.labels)\n const nextDatasets = toRawIfProxy(nextDataProxy.datasets)\n const prevDatasets = toRawIfProxy(prevDataProxy.datasets)\n\n if (nextLabels !== prevLabels) {\n setLabels(chart.config.data, nextLabels)\n shouldUpdate = true\n }\n\n if (nextDatasets && nextDatasets !== prevDatasets) {\n setDatasets(chart.config.data, nextDatasets, props.datasetIdKey)\n shouldUpdate = true\n }\n }\n\n if (shouldUpdate) {\n nextTick(() => {\n update(chart)\n })\n }\n },\n { deep: true }\n )\n\n return () => {\n return h(\n 'canvas',\n {\n role: 'img',\n 'aria-label': props.ariaLabel,\n 'aria-describedby': props.ariaDescribedby,\n ref: canvasRef\n },\n [h('p', {}, [slots.default ? slots.default() : ''])]\n )\n }\n }\n}) as ChartComponent\n","import { defineComponent, shallowRef, h } from 'vue'\nimport type { ChartType, ChartComponentLike, DefaultDataPoint } from 'chart.js'\nimport {\n Chart as ChartJS,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController\n} from 'chart.js'\nimport type { DistributiveArray } from 'chart.js/dist/types/utils'\nimport type { TypedChartComponent, ChartComponentRef } from './types.js'\nimport { CommonProps } from './props.js'\nimport { Chart } from './chart.js'\nimport { compatProps } from './utils.js'\n\nexport function createTypedChart<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n type: TType,\n registerables: ChartComponentLike\n): TypedChartComponent {\n ChartJS.register(registerables)\n\n return defineComponent({\n props: CommonProps,\n setup(props, { expose }) {\n const ref = shallowRef(null)\n const reforwardRef = (chartRef: ChartComponentRef) => {\n ref.value = chartRef?.chart\n }\n\n expose({ chart: ref })\n\n return () => {\n return h(\n Chart,\n compatProps(\n {\n ref: reforwardRef as any\n },\n {\n type,\n ...props\n }\n )\n )\n }\n }\n }) as any\n}\n\nexport interface ExtendedDataPoint {\n [key: string]: string | number | null | ExtendedDataPoint\n}\n\nexport const Bar = /* #__PURE__ */ createTypedChart<\n 'bar',\n DefaultDataPoint<'bar'> | DistributiveArray\n>('bar', BarController)\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n)\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController)\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController)\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n)\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController)\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n)\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n)\n","/**\r\n * BatchProcessor - 批量数据处理类\r\n * \r\n * 处理批量数据获取和处理的核心类,使用 cursor 分页机制获取所有数据。\r\n * 支持进度回调和取消功能。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\n\r\n/**\r\n * 批量操作错误类\r\n * 提供错误代码、是否可恢复、建议操作等信息\r\n */\r\nexport class BatchOperationError extends Error {\r\n constructor(message, code, recoverable = false, suggestion = '') {\r\n super(message);\r\n this.name = 'BatchOperationError';\r\n this.code = code;\r\n this.recoverable = recoverable;\r\n this.suggestion = suggestion;\r\n }\r\n}\r\n\r\n/**\r\n * 错误处理器映射\r\n * 根据 HTTP 状态码返回对应的错误对象\r\n */\r\nconst ERROR_HANDLERS = {\r\n 401: () => new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n ),\r\n 403: () => new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n ),\r\n 400: (details) => new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n ),\r\n 500: () => new BatchOperationError(\r\n '服务器内部错误',\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试,如果问题持续请联系管理员'\r\n ),\r\n NETWORK: () => new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n ),\r\n ABORT: () => new BatchOperationError(\r\n '操作已取消',\r\n 'ABORTED',\r\n false,\r\n ''\r\n )\r\n};\r\n\r\n/**\r\n * 根据错误创建 BatchOperationError\r\n * @param {Error|Response} error - 原始错误或响应对象\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\nfunction createError(error, details = '') {\r\n // 处理取消操作\r\n if (error.name === 'AbortError') {\r\n return ERROR_HANDLERS.ABORT();\r\n }\r\n \r\n // 处理 HTTP 响应错误\r\n if (error instanceof Response || (error && typeof error.status === 'number')) {\r\n const handler = ERROR_HANDLERS[error.status];\r\n if (handler) {\r\n return handler(details);\r\n }\r\n return new BatchOperationError(\r\n `请求失败: ${error.status}`,\r\n 'HTTP_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n \r\n // 处理网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n return ERROR_HANDLERS.NETWORK();\r\n }\r\n \r\n // 其他错误\r\n return new BatchOperationError(\r\n error.message || '未知错误',\r\n 'UNKNOWN_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n}\r\n\r\n/**\r\n * BatchProcessor 类\r\n * \r\n * 用于批量获取和处理数据的核心类\r\n */\r\nclass BatchProcessor {\r\n /**\r\n * 创建 BatchProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.batchSize - 每批数据量,默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.batchSize = options.batchSize || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.abortController = null;\r\n }\r\n\r\n /**\r\n * 获取所有数据记录\r\n * 使用 cursor 分页机制循环获取所有数据,直到没有更多数据或操作被取消\r\n * \r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 所有记录的数组\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async fetchAllRecords(includeValue = false) {\r\n // 创建新的 AbortController 用于取消操作\r\n this.abortController = new AbortController();\r\n const allRecords = [];\r\n let cursor = null;\r\n let totalFetched = 0;\r\n let batchCount = 0;\r\n\r\n try {\r\n do {\r\n // 检查是否已取消\r\n if (this.abortController.signal.aborted) {\r\n break;\r\n }\r\n\r\n // 获取一批数据\r\n const response = await this.fetchBatch(cursor, includeValue);\r\n \r\n // 合并数据到总数组\r\n allRecords.push(...response.records);\r\n cursor = response.nextCursor;\r\n totalFetched += response.records.length;\r\n batchCount++;\r\n\r\n // 调用进度回调\r\n this.onProgress({\r\n phase: 'fetching',\r\n current: totalFetched,\r\n batchCount: batchCount,\r\n message: `已获取 ${totalFetched} 条记录...`\r\n });\r\n\r\n } while (cursor && !this.abortController.signal.aborted);\r\n\r\n // 如果是因为取消而退出循环,抛出取消错误\r\n if (this.abortController.signal.aborted) {\r\n throw ERROR_HANDLERS.ABORT();\r\n }\r\n\r\n return allRecords;\r\n } catch (error) {\r\n // 调用错误回调\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : createError(error);\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 获取单批数据\r\n * \r\n * @param {string|null} cursor - 分页游标,首次请求为 null\r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 包含 records 和 nextCursor 的响应对象\r\n * @throws {BatchOperationError} 当请求失败时抛出\r\n */\r\n async fetchBatch(cursor, includeValue) {\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (cursor) {\r\n params.set('cursor', cursor);\r\n }\r\n if (includeValue) {\r\n params.set('includeValue', 'true');\r\n }\r\n params.set('limit', String(this.batchSize));\r\n\r\n try {\r\n // 发送请求,传入 abort signal 支持取消\r\n const response = await fetchWithAuth(\r\n `/api/manage/batch/list?${params}`,\r\n { signal: this.abortController.signal }\r\n );\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw createError(response, errorDetails);\r\n }\r\n\r\n // 解析响应数据\r\n const data = await response.json();\r\n \r\n // 验证响应格式\r\n if (!data.success) {\r\n throw new BatchOperationError(\r\n data.error || '请求失败',\r\n 'API_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return {\r\n records: data.records || [],\r\n nextCursor: data.nextCursor || null,\r\n totalProcessed: data.totalProcessed || 0\r\n };\r\n } catch (error) {\r\n // 如果已经是 BatchOperationError,直接抛出\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 否则转换为 BatchOperationError\r\n throw createError(error);\r\n }\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n * 调用此方法将中止正在进行的 fetch 请求\r\n */\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.abortController ? this.abortController.signal.aborted : false;\r\n }\r\n\r\n /**\r\n * 重置处理器状态\r\n * 在开始新的批量操作前调用\r\n */\r\n reset() {\r\n this.abortController = null;\r\n }\r\n}\r\n\r\nexport default BatchProcessor;\r\n","/**\r\n * IndexRebuilder - 索引重建类\r\n * \r\n * 处理索引重建的完整流程,包括数据获取、排序、分块上传和完成。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport BatchProcessor, { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * IndexRebuilder 类\r\n * \r\n * 用于重建索引的核心类,协调数据获取、排序和分块上传\r\n */\r\nclass IndexRebuilder {\r\n /**\r\n * 创建 IndexRebuilder 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每个分块的记录数,默认从后端获取\r\n * @param {number} options.maxRetries - 分块上传最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || null; // 从后端获取\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.sessionId = this.generateSessionId();\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 从后端获取索引配置(分块大小等)\r\n * @returns {Promise} 配置对象 { chunkSize, databaseType }\r\n */\r\n async fetchConfig() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/config');\r\n if (!response.ok) {\r\n throw new Error('获取配置失败');\r\n }\r\n const result = await response.json();\r\n if (result.success) {\r\n return {\r\n chunkSize: result.chunkSize || 500,\r\n databaseType: result.databaseType || 'unknown'\r\n };\r\n }\r\n throw new Error(result.error || '获取配置失败');\r\n } catch (error) {\r\n // 获取失败时使用保守的默认值(兼容 D1)\r\n console.warn('Failed to fetch index config, using default:', error);\r\n return { chunkSize: 500, databaseType: 'unknown' };\r\n }\r\n }\r\n\r\n /**\r\n * 执行索引重建\r\n * \r\n * 完整流程:\r\n * 1. 获取配置(分块大小)\r\n * 2. 获取所有记录\r\n * 3. 按时间戳降序排序\r\n * 4. 分块上传\r\n * 5. 完成重建\r\n * \r\n * @returns {Promise} 重建结果 { success: boolean, totalFiles: number }\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async rebuild() {\r\n this.aborted = false;\r\n \r\n try {\r\n // 获取配置(分块大小)\r\n if (!this.chunkSize) {\r\n const config = await this.fetchConfig();\r\n this.chunkSize = config.chunkSize;\r\n }\r\n\r\n // 获取所有记录\r\n this.onProgress({ \r\n phase: 'fetching', \r\n message: '正在获取数据...',\r\n current: 0\r\n });\r\n \r\n const processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' }),\r\n onError: (e) => this.onError(e)\r\n });\r\n \r\n const records = await processor.fetchAllRecords(false);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 排序(按时间戳降序)\r\n this.onProgress({ \r\n phase: 'sorting', \r\n message: '正在排序...',\r\n current: 0,\r\n total: records.length\r\n });\r\n \r\n this.sortByTimestampDescending(records);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 分块上传\r\n const chunks = this.splitIntoChunks(records);\r\n \r\n for (let i = 0; i < chunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n \r\n // 使用重试机制上传分块\r\n await this.uploadChunkWithRetry(chunks[i], i);\r\n \r\n this.onProgress({\r\n phase: 'uploading',\r\n current: i + 1,\r\n total: chunks.length,\r\n message: `正在上传分块 ${i + 1}/${chunks.length}...`\r\n });\r\n }\r\n\r\n // 完成重建\r\n this.onProgress({ \r\n phase: 'finalizing', \r\n message: '正在完成重建...',\r\n current: chunks.length,\r\n total: chunks.length\r\n });\r\n \r\n await this.finalize(chunks.length, records.length);\r\n\r\n this.onProgress({\r\n phase: 'completed',\r\n message: `索引重建完成,共 ${records.length} 个文件`,\r\n current: records.length,\r\n total: records.length\r\n });\r\n\r\n return { success: true, totalFiles: records.length };\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : new BatchOperationError(\r\n error.message || '索引重建失败',\r\n 'REBUILD_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 按时间戳降序排序记录\r\n * \r\n * @param {Array} records - 要排序的记录数组(原地排序)\r\n */\r\n sortByTimestampDescending(records) {\r\n records.sort((a, b) => {\r\n const timestampA = (a.metadata && a.metadata.TimeStamp) || 0;\r\n const timestampB = (b.metadata && b.metadata.TimeStamp) || 0;\r\n return timestampB - timestampA;\r\n });\r\n }\r\n\r\n /**\r\n * 将记录分割为多个块\r\n * \r\n * @param {Array} records - 要分割的记录数组\r\n * @returns {Array} 分块后的二维数组\r\n */\r\n splitIntoChunks(records) {\r\n const chunks = [];\r\n for (let i = 0; i < records.length; i += this.chunkSize) {\r\n chunks.push(records.slice(i, i + this.chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当所有重试都失败时抛出\r\n */\r\n async uploadChunkWithRetry(chunk, chunkId) {\r\n let lastError;\r\n \r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(chunk, chunkId);\r\n } catch (error) {\r\n lastError = error;\r\n \r\n // 不重试的错误类型\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' || \r\n error.code === 'FORBIDDEN' || \r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n \r\n // 如果还有重试机会,等待后重试\r\n if (attempt < this.maxRetries) {\r\n // 指数退避\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n \r\n this.onProgress({\r\n phase: 'retrying',\r\n message: `分块 ${chunkId + 1} 上传失败,正在重试 (${attempt}/${this.maxRetries})...`,\r\n current: chunkId,\r\n attempt: attempt\r\n });\r\n }\r\n }\r\n }\r\n \r\n // 所有重试都失败\r\n throw lastError instanceof BatchOperationError \r\n ? lastError \r\n : new BatchOperationError(\r\n `分块 ${chunkId + 1} 上传失败,已重试 ${this.maxRetries} 次`,\r\n 'CHUNK_UPLOAD_FAILED',\r\n false,\r\n '请检查网络连接后重新开始重建'\r\n );\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当上传失败时抛出\r\n */\r\n async uploadChunk(chunk, chunkId) {\r\n const checksum = await this.calculateChecksum(chunk);\r\n \r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n chunkId: String(chunkId),\r\n sessionId: this.sessionId,\r\n data: chunk,\r\n checksum\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 完成索引重建\r\n * \r\n * @param {number} totalChunks - 总分块数\r\n * @param {number} totalFiles - 总文件数\r\n * @returns {Promise} 完成响应\r\n * @throws {BatchOperationError} 当完成请求失败时抛出\r\n */\r\n async finalize(totalChunks, totalFiles) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/finalize', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sessionId: this.sessionId,\r\n totalChunks,\r\n totalFiles\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n throw new BatchOperationError(\r\n error.message || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 生成唯一的会话 ID\r\n * \r\n * @returns {string} 会话 ID\r\n */\r\n generateSessionId() {\r\n return `rebuild_${Date.now()}_${Math.random().toString(36).slice(2)}`;\r\n }\r\n\r\n /**\r\n * 计算数据的 SHA-256 校验和\r\n * \r\n * @param {Array} data - 要计算校验和的数据\r\n * @returns {Promise} 十六进制格式的校验和\r\n */\r\n async calculateChecksum(data) {\r\n const text = JSON.stringify(data);\r\n const encoder = new TextEncoder();\r\n const dataBuffer = encoder.encode(text);\r\n\r\n // crypto.subtle 仅在安全上下文(HTTPS / localhost)下可用\r\n // 通过 0.0.0.0 等非安全上下文访问时需要 fallback\r\n if (typeof crypto !== 'undefined' && crypto.subtle) {\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n // Fallback: 简单但足够用于校验的哈希实现 (FNV-1a 变体, 产生 64 位十六进制)\r\n let h1 = 0x811c9dc5 >>> 0;\r\n let h2 = 0x811c9dc5 >>> 0;\r\n for (let i = 0; i < dataBuffer.length; i++) {\r\n h1 = Math.imul(h1 ^ dataBuffer[i], 0x01000193) >>> 0;\r\n h2 = Math.imul(h2 ^ dataBuffer[i], 0x01000193 + 0x10) >>> 0;\r\n }\r\n return h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n }\r\n\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n * \r\n * @param {number} status - HTTP 状态码\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n );\r\n case 404:\r\n return new BatchOperationError(\r\n '会话不存在',\r\n 'SESSION_NOT_FOUND',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 410:\r\n return new BatchOperationError(\r\n '会话已过期',\r\n 'SESSION_EXPIRED',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n * \r\n * @param {number} ms - 延迟毫秒数\r\n * @returns {Promise}\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n\r\n /**\r\n * 重置重建器状态\r\n * 在开始新的重建操作前调用\r\n */\r\n reset() {\r\n this.aborted = false;\r\n this.sessionId = this.generateSessionId();\r\n }\r\n}\r\n\r\nexport default IndexRebuilder;\r\n","/**\r\n * BackupGenerator - 备份数据生成类\r\n * \r\n * 处理前端辅助备份功能,获取所有文件记录(包含分块文件的 value),\r\n * 构建完整的备份 JSON 文件,并触发浏览器下载。\r\n */\r\n\r\nimport BatchProcessor from '@/utils/batchProcessor';\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport packageInfo from '../../package.json'\r\n\r\n/**\r\n * BackupGenerator 类\r\n * \r\n * 用于生成和下载备份数据的类\r\n */\r\nclass BackupGenerator {\r\n /**\r\n * 创建 BackupGenerator 实例\r\n * @param {Object} options - 配置选项\r\n * @param {Function} options.onProgress - 进度回调函数\r\n */\r\n constructor(options = {}) {\r\n this.onProgress = options.onProgress || (() => {});\r\n this.processor = null;\r\n }\r\n\r\n /**\r\n * 生成并下载备份\r\n * \r\n * 完整流程:\r\n * 1. 获取所有文件记录(包含分块文件的 value)\r\n * 2. 构建备份数据结构\r\n * 3. 获取系统设置\r\n * 4. 生成并触发下载\r\n * \r\n * @returns {Promise} 包含 success 和 fileCount 的结果对象\r\n * @throws {Error} 当备份过程中发生错误时抛出\r\n */\r\n async generateBackup() {\r\n // 获取所有文件记录(包含分块文件的 value)\r\n this.processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' })\r\n });\r\n\r\n const records = await this.processor.fetchAllRecords(true);\r\n\r\n // 构建备份数据\r\n this.onProgress({ phase: 'building', message: '正在构建备份数据...' });\r\n\r\n const backupData = {\r\n timestamp: Date.now(),\r\n version: packageInfo.version,\r\n data: {\r\n fileCount: records.length,\r\n files: {},\r\n settings: {}\r\n }\r\n };\r\n\r\n // 将记录转换为以 id 为键的对象格式\r\n for (const record of records) {\r\n backupData.data.files[record.id] = {\r\n metadata: record.metadata,\r\n value: record.value || null\r\n };\r\n }\r\n\r\n // 3. 获取系统设置\r\n const settings = await this.fetchSettings();\r\n backupData.data.settings = settings;\r\n\r\n // 生成下载\r\n this.onProgress({ phase: 'downloading', message: '正在生成下载...' });\r\n this.downloadBackup(backupData);\r\n\r\n const settingsCount = Object.keys(settings).length;\r\n return { success: true, fileCount: records.length, settingsCount };\r\n }\r\n\r\n /**\r\n * 获取系统设置\r\n * \r\n * @returns {Promise} 系统设置对象,失败时返回空对象\r\n */\r\n async fetchSettings() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/settings');\r\n if (!response.ok) {\r\n console.warn('Failed to fetch settings:', response.status);\r\n return {};\r\n }\r\n const data = await response.json();\r\n // 返回 settings 字段,而不是整个响应\r\n return data.settings || {};\r\n } catch (error) {\r\n console.warn('Failed to fetch settings:', error);\r\n return {};\r\n }\r\n }\r\n\r\n /**\r\n * 触发浏览器下载备份文件\r\n * \r\n * @param {Object} data - 备份数据对象\r\n */\r\n downloadBackup(data) {\r\n // 将数据转换为格式化的 JSON 字符串\r\n const json = JSON.stringify(data, null, 2);\r\n \r\n // 创建 Blob 对象\r\n const blob = new Blob([json], { type: 'application/json' });\r\n \r\n // 创建下载 URL\r\n const url = URL.createObjectURL(blob);\r\n\r\n // 创建临时下载链接\r\n const a = document.createElement('a');\r\n a.href = url;\r\n // 使用日期作为文件名的一部分\r\n a.download = `imgbed_backup_${new Date().toISOString().split('T')[0]}.json`;\r\n \r\n // 触发下载\r\n document.body.appendChild(a);\r\n a.click();\r\n \r\n // 清理\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n /**\r\n * 取消当前备份操作\r\n */\r\n abort() {\r\n if (this.processor) {\r\n this.processor.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.processor ? this.processor.isAborted() : false;\r\n }\r\n}\r\n\r\nexport default BackupGenerator;\r\n","/**\r\n * RestoreProcessor - 分批恢复数据类\r\n * \r\n * 将备份数据分批上传到后端进行恢复,避免 CPU 超时\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * RestoreProcessor 类\r\n */\r\nclass RestoreProcessor {\r\n /**\r\n * 创建 RestoreProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每批数据量,默认 50\r\n * @param {number} options.maxRetries - 最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || 50;\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 执行恢复操作\r\n * \r\n * @param {Object} backupData - 备份数据对象\r\n * @returns {Promise} 恢复结果\r\n */\r\n async restore(backupData) {\r\n this.aborted = false;\r\n\r\n // 验证备份数据格式\r\n if (!backupData || !backupData.data) {\r\n throw new BatchOperationError(\r\n '备份文件格式无效',\r\n 'INVALID_BACKUP',\r\n false,\r\n '请选择有效的备份文件'\r\n );\r\n }\r\n\r\n const { files = {}, settings = {} } = backupData.data;\r\n const fileEntries = Object.entries(files);\r\n const settingEntries = Object.entries(settings);\r\n \r\n const totalFiles = fileEntries.length;\r\n const totalSettings = settingEntries.length;\r\n const totalItems = totalFiles + totalSettings;\r\n\r\n let restoredFiles = 0;\r\n let restoredSettings = 0;\r\n let failedFiles = 0;\r\n let failedSettings = 0;\r\n\r\n try {\r\n // 1. 分批恢复文件数据\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: '正在恢复文件数据...',\r\n current: 0,\r\n total: totalItems\r\n });\r\n\r\n const fileChunks = this.splitIntoChunks(fileEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < fileChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = fileChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('files', chunkData);\r\n restoredFiles += result.restoredCount;\r\n failedFiles += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: `正在恢复文件数据 ${restoredFiles}/${totalFiles}...`,\r\n current: restoredFiles,\r\n total: totalItems,\r\n percentage: (restoredFiles / totalItems) * 80\r\n });\r\n }\r\n\r\n // 2. 分批恢复系统设置\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: '正在恢复系统设置...',\r\n current: restoredFiles,\r\n total: totalItems\r\n });\r\n\r\n const settingChunks = this.splitIntoChunks(settingEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < settingChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = settingChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('settings', chunkData);\r\n restoredSettings += result.restoredCount;\r\n failedSettings += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: `正在恢复系统设置 ${restoredSettings}/${totalSettings}...`,\r\n current: restoredFiles + restoredSettings,\r\n total: totalItems,\r\n percentage: 80 + (restoredSettings / totalSettings) * 20\r\n });\r\n }\r\n\r\n // 3. 完成\r\n this.onProgress({\r\n phase: 'completed',\r\n message: '恢复完成',\r\n current: totalItems,\r\n total: totalItems,\r\n percentage: 100\r\n });\r\n\r\n return {\r\n success: true,\r\n restoredFiles,\r\n restoredSettings,\r\n failedFiles,\r\n failedSettings,\r\n backupTimestamp: backupData.timestamp\r\n };\r\n\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError\r\n ? error\r\n : new BatchOperationError(\r\n error.message || '恢复失败',\r\n 'RESTORE_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 将数组分割为多个块\r\n */\r\n splitIntoChunks(entries, chunkSize) {\r\n const chunks = [];\r\n for (let i = 0; i < entries.length; i += chunkSize) {\r\n chunks.push(entries.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n */\r\n async uploadChunkWithRetry(type, data) {\r\n let lastError;\r\n\r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(type, data);\r\n } catch (error) {\r\n lastError = error;\r\n\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' ||\r\n error.code === 'FORBIDDEN' ||\r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n\r\n if (attempt < this.maxRetries) {\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n }\r\n }\r\n }\r\n\r\n throw lastError;\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n */\r\n async uploadChunk(type, data) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/restore/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type, data })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n\r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查备份文件格式'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n}\r\n\r\nexport default RestoreProcessor;\r\n","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport packageInfo from '../../../package.json';\nimport { Doughnut, Line } from 'vue-chartjs';\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler } from 'chart.js';\nimport IndexRebuilder from '@/utils/indexRebuilder';\nimport BackupGenerator from '@/utils/backupGenerator';\nimport RestoreProcessor from '@/utils/restoreProcessor';\nimport DateRangeCalendar from '@/components/DateRangeCalendar.vue';\nChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler);\nconst DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateInput(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction getDefaultTrendDateRange() {\n const endDate = new Date();\n endDate.setHours(0, 0, 0, 0);\n const startDate = new Date(endDate.getTime() - 6 * DAY_MS);\n return [formatDateInput(startDate), formatDateInput(endDate)];\n}\nexport default {\n name: 'SysCogStatus',\n components: {\n Doughnut,\n Line,\n DateRangeCalendar\n },\n data() {\n return {\n loading: false,\n rebuilding: false,\n backing: false,\n restoring: false,\n indexInfo: {},\n indexInfoLoaded: false,\n indexInfoError: false,\n currentTime: new Date(),\n clockTimer: null,\n version: packageInfo.version,\n // 从package.json获取版本号\n loadErrors: {\n newest: false,\n oldest: false\n },\n trendGroupBy: 'channel',\n trendDatePickerVisible: false,\n trendDateRange: getDefaultTrendDateRange(),\n // 渠道图表颜色\n channelColors: ['#8B5CF6', '#EC4899', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#2563EB', '#84CC16'],\n // 状态图表颜色\n typeColors: ['#10B981', '#3B82F6', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899', '#06B6D4', '#84CC16'],\n // 上传趋势折线图颜色\n trendColors: ['#2563EB', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6', '#06B6D4', '#EC4899', '#84CC16', '#64748B'],\n // 批量操作进度状态\n isProcessing: false,\n processingPhase: '',\n // fetching, sorting, uploading, finalizing, building, downloading, completed\n processingProgress: {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n },\n processingError: null,\n processingStartTime: null,\n // 当前处理器实例(用于取消操作)\n currentRebuilder: null,\n currentBackupGenerator: null,\n currentRestoreProcessor: null\n };\n },\n computed: {\n currentLocale() {\n return String(this.$i18n.locale || 'zh-CN');\n },\n indexedFileCount() {\n return Number(this.indexInfo.totalFiles || 0);\n },\n uploadChannelCount() {\n return Object.keys(this.indexInfo.channelStats || {}).length;\n },\n systemHealthState() {\n if (this.indexInfoError) return 'attention';\n if (!this.indexInfoLoaded) return 'checking';\n return 'healthy';\n },\n systemHealthLabel() {\n return this.$t(`sysStatus.health${this.systemHealthState.charAt(0).toUpperCase()}${this.systemHealthState.slice(1)}`);\n },\n greetingTitle() {\n const hour = this.currentTime.getHours();\n if (hour < 5) return this.$t('sysStatus.greetingLateNight');\n if (hour < 11) return this.$t('sysStatus.greetingMorning');\n if (hour < 14) return this.$t('sysStatus.greetingNoon');\n if (hour < 18) return this.$t('sysStatus.greetingAfternoon');\n if (hour < 23) return this.$t('sysStatus.greetingEvening');\n return this.$t('sysStatus.greetingLateNight');\n },\n systemStatusSummary() {\n if (this.indexInfoError) return this.$t('sysStatus.summaryUnavailable');\n if (!this.indexInfoLoaded) return this.$t('sysStatus.summaryChecking');\n if (this.indexedFileCount === 0) return this.$t('sysStatus.summaryEmpty');\n if (this.uploadChannelCount === 0) {\n return this.$t('sysStatus.summaryIndexed', {\n files: this.indexedFileCount.toLocaleString(this.currentLocale)\n });\n }\n return this.$t('sysStatus.summaryHealthy', {\n files: this.indexedFileCount.toLocaleString(this.currentLocale),\n channels: this.uploadChannelCount.toLocaleString(this.currentLocale)\n });\n },\n currentDateLabel() {\n return new Intl.DateTimeFormat(this.currentLocale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n weekday: 'long'\n }).format(this.currentTime);\n },\n currentTimeLabel() {\n return new Intl.DateTimeFormat(this.currentLocale, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n }).format(this.currentTime);\n },\n timeZoneLabel() {\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || this.$t('sysStatus.localTimezone');\n const offsetMinutes = -this.currentTime.getTimezoneOffset();\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absoluteMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absoluteMinutes / 60);\n const minutes = absoluteMinutes % 60;\n const offset = minutes === 0 ? `UTC${sign}${hours}` : `UTC${sign}${hours}:${String(minutes).padStart(2, '0')}`;\n return `${timeZone} · ${offset}`;\n },\n // 渠道分布图表数据\n channelChartData() {\n const stats = this.indexInfo.channelStats || {};\n return {\n labels: Object.keys(stats),\n datasets: [{\n data: Object.values(stats),\n backgroundColor: this.channelColors.slice(0, Object.keys(stats).length),\n borderWidth: 0\n }]\n };\n },\n // 文件状态图表数据 - 将Block映射为\"已屏蔽\",其余为\"正常\"\n typeChartData() {\n const aggregatedStats = this.aggregatedTypeStats;\n return {\n labels: Object.keys(aggregatedStats),\n datasets: [{\n data: Object.values(aggregatedStats),\n backgroundColor: this.typeColors.slice(0, Object.keys(aggregatedStats).length),\n borderWidth: 0\n }]\n };\n },\n // 聚合后的状态统计:Block -> 已屏蔽,其余 -> 正常\n aggregatedTypeStats() {\n const stats = this.indexInfo.typeStats || {};\n const aggregatedStats = {};\n for (const [status, count] of Object.entries(stats)) {\n const mappedStatus = status === 'Block' ? this.$t('sysStatus.blocked') : this.$t('sysStatus.normalStatus');\n aggregatedStats[mappedStatus] = (aggregatedStats[mappedStatus] || 0) + count;\n }\n return aggregatedStats;\n },\n // 当前趋势维度数据\n currentTrendGroup() {\n const trend = this.indexInfo.uploadTrend || {};\n const groupBy = trend.groupBy || {};\n return groupBy[this.trendGroupBy] || {\n series: []\n };\n },\n // 趋势图原始日期标签\n trendRawLabels() {\n const trend = this.indexInfo.uploadTrend || {};\n return trend.labels || [];\n },\n // 当前范围是否跨年\n trendRangeCrossesYear() {\n const years = new Set();\n this.trendRawLabels.forEach(label => {\n this.extractTrendLabelDates(label).forEach(date => years.add(date.year));\n });\n return years.size > 1;\n },\n // 用于横轴展示的短日期标签\n trendDisplayLabels() {\n return this.trendRawLabels.map(label => this.formatTrendAxisLabel(label));\n },\n // 是否存在趋势图数据\n hasTrendData() {\n const trend = this.indexInfo.uploadTrend || {};\n return (trend.labels || []).length > 0;\n },\n // 日期选择弹窗宽度保持与项目内其他弹窗一致\n trendDateDialogWidth() {\n return window.innerWidth > 768 ? '420px' : '90%';\n },\n // 上传趋势折线图数据\n uploadTrendChartData() {\n const trend = this.indexInfo.uploadTrend || {};\n const series = this.currentTrendGroup.series || [];\n const totalColor = '#F97316';\n return {\n labels: this.trendDisplayLabels,\n datasets: [{\n label: this.$t('sysStatus.totalUploads'),\n data: trend.total || [],\n borderColor: totalColor,\n backgroundColor: this.hexToRgba(totalColor, 0.1),\n pointBackgroundColor: totalColor,\n pointBorderColor: totalColor,\n borderWidth: 3,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.28,\n fill: false\n }, ...series.map((item, index) => {\n const color = this.getTrendColor(index);\n return {\n label: this.formatTrendSeriesName(item),\n data: item.data || [],\n borderColor: color,\n backgroundColor: this.hexToRgba(color, 0.12),\n pointBackgroundColor: color,\n pointBorderColor: color,\n borderWidth: 2,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.32,\n fill: false\n };\n })]\n };\n },\n // 折线图配置\n lineChartOptions() {\n const textColor = '#64748B';\n return {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n mode: 'index',\n intersect: false\n },\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n padding: 16,\n color: textColor\n }\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n callbacks: {\n title: items => {\n const index = items?.[0]?.dataIndex;\n return this.trendRawLabels[index] || '';\n },\n label: context => {\n const parsed = context.parsed || {};\n const value = parsed.y !== undefined ? parsed.y : context.raw;\n return ` ${context.dataset.label}: ${Number(value || 0).toLocaleString()} ${this.$t('sysStatus.uploadsUnit')}`;\n }\n }\n }\n },\n scales: {\n x: {\n grid: {\n display: false\n },\n ticks: {\n color: textColor,\n maxTicksLimit: 8,\n autoSkip: true\n }\n },\n y: {\n beginAtZero: true,\n grid: {\n color: 'rgba(148, 163, 184, 0.18)'\n },\n ticks: {\n color: textColor,\n precision: 0,\n callback: value => Number(value).toLocaleString()\n }\n }\n }\n };\n },\n // 图表配置\n chartOptions() {\n return {\n responsive: true,\n maintainAspectRatio: true,\n cutout: '65%',\n hoverOffset: 8,\n layout: {\n padding: 10\n },\n plugins: {\n legend: {\n display: false\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n z: 100,\n callbacks: {\n label: context => {\n const value = context.raw;\n const total = context.dataset.data.reduce((a, b) => a + b, 0);\n const percentage = (value / total * 100).toFixed(1);\n return ` ${value.toLocaleString()} (${percentage}%)`;\n }\n }\n }\n },\n animation: {\n animateRotate: true,\n animateScale: true\n }\n };\n },\n // 预计剩余时间\n estimatedTimeRemaining() {\n if (!this.isProcessing || !this.processingStartTime) return '';\n if (this.processingProgress.current === 0 || this.processingProgress.percentage === 0) return '';\n const elapsed = Date.now() - this.processingStartTime;\n const progress = this.processingProgress.percentage / 100;\n if (progress <= 0) return '';\n const totalEstimated = elapsed / progress;\n const remaining = totalEstimated - elapsed;\n if (remaining <= 0) return this.$t('sysStatus.aboutToComplete');\n const seconds = Math.ceil(remaining / 1000);\n if (seconds < 60) return this.$t('sysStatus.seconds', {\n count: seconds\n });\n const minutes = Math.ceil(seconds / 60);\n if (minutes < 60) return this.$t('sysStatus.minutes', {\n count: minutes\n });\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return this.$t('sysStatus.hoursMinutes', {\n hours,\n minutes: remainingMinutes\n });\n },\n // 处理阶段描述\n phaseDescription() {\n const phaseMap = {\n 'fetching': this.$t('sysStatus.phaseFetching'),\n 'sorting': this.$t('sysStatus.phaseSorting'),\n 'uploading': this.$t('sysStatus.phaseUploading'),\n 'finalizing': this.$t('sysStatus.phaseFinalizing'),\n 'building': this.$t('sysStatus.phaseBuilding'),\n 'downloading': this.$t('sysStatus.phaseDownloading'),\n 'restoring_files': this.$t('sysStatus.phaseRestoringFiles'),\n 'restoring_settings': this.$t('sysStatus.phaseRestoringSettings'),\n 'completed': this.$t('sysStatus.phaseCompleted'),\n 'retrying': this.$t('sysStatus.phaseRetrying')\n };\n return phaseMap[this.processingPhase] || this.processingPhase;\n }\n },\n mounted() {\n this.fetchIndexInfo();\n this.clockTimer = window.setInterval(() => {\n this.currentTime = new Date();\n }, 1000);\n },\n beforeUnmount() {\n if (this.clockTimer) {\n window.clearInterval(this.clockTimer);\n this.clockTimer = null;\n }\n },\n methods: {\n // 获取渠道图表颜色\n getChartColor(index) {\n return this.channelColors[index % this.channelColors.length];\n },\n // 获取状态图表颜色\n getTypeChartColor(index) {\n return this.typeColors[index % this.typeColors.length];\n },\n // 获取趋势图表颜色\n getTrendColor(index) {\n return this.trendColors[index % this.trendColors.length];\n },\n // 格式化趋势序列名称\n formatTrendSeriesName(series) {\n if (series?.isOther || series?.name === '__other__') {\n return this.$t('sysStatus.otherChannels');\n }\n return series?.name || this.$t('sysStatus.unknown');\n },\n // 十六进制颜色转换为 rgba\n hexToRgba(hex, alpha) {\n const normalized = (hex || '').replace('#', '');\n if (normalized.length !== 6) {\n return `rgba(37, 99, 235, ${alpha})`;\n }\n const r = parseInt(normalized.slice(0, 2), 16);\n const g = parseInt(normalized.slice(2, 4), 16);\n const b = parseInt(normalized.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n },\n // 提取趋势标签中的日期\n extractTrendLabelDates(label) {\n const matches = String(label || '').match(/\\d{4}-\\d{2}-\\d{2}/g) || [];\n return matches.map(item => {\n const [year, month, day] = item.split('-').map(Number);\n return {\n year,\n month,\n day\n };\n });\n },\n // 横轴日期标签按范围简化,仅跨年时显示年份\n formatTrendAxisLabel(label) {\n const dates = this.extractTrendLabelDates(label);\n if (dates.length === 0) return label;\n const formatSingleDate = (date, includeYear) => {\n const monthDay = `${date.month}/${date.day}`;\n return includeYear ? `${date.year}/${monthDay}` : monthDay;\n };\n if (dates.length === 1) {\n return formatSingleDate(dates[0], this.trendRangeCrossesYear);\n }\n const [startDate, endDate] = dates;\n if (!this.trendRangeCrossesYear) {\n return `${formatSingleDate(startDate, false)}-${formatSingleDate(endDate, false)}`;\n }\n const endLabel = startDate.year === endDate.year ? formatSingleDate(endDate, false) : formatSingleDate(endDate, true);\n return `${formatSingleDate(startDate, true)}-${endLabel}`;\n },\n // 打开居中的日期范围选择弹窗\n openTrendDateDialog() {\n this.trendDatePickerVisible = true;\n },\n // 日期范围变更后重新拉取趋势数据\n handleTrendDateRangeChange(value) {\n if (!Array.isArray(value) || value.length !== 2 || !value[0] || !value[1]) {\n return;\n }\n this.trendDatePickerVisible = false;\n this.fetchIndexInfo();\n },\n // 获取趋势查询参数\n getTrendDateRangeParams() {\n if (!Array.isArray(this.trendDateRange) || this.trendDateRange.length !== 2) {\n this.trendDateRange = getDefaultTrendDateRange();\n }\n return {\n startDate: this.trendDateRange[0],\n endDate: this.trendDateRange[1]\n };\n },\n // 获取索引信息\n async fetchIndexInfo() {\n this.loading = true;\n this.indexInfoError = false;\n try {\n const {\n startDate,\n endDate\n } = this.getTrendDateRangeParams();\n const params = new URLSearchParams({\n action: 'info',\n timezoneOffset: String(new Date().getTimezoneOffset()),\n trendMaxPoints: '90',\n trendSeriesLimit: '8',\n trendStartDate: startDate,\n trendEndDate: endDate\n });\n const response = await fetchWithAuth(`/api/manage/list?${params.toString()}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.indexInfo = data;\n this.indexInfoLoaded = true;\n } else {\n throw new Error('API请求失败');\n }\n } catch (error) {\n console.error('获取索引信息失败:', error);\n this.indexInfoError = true;\n this.$message.error(this.$t('sysStatus.fetchIndexFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 重建索引 - 使用前端辅助重建流程\n async rebuildIndex() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.rebuilding = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 IndexRebuilder 实例\n this.currentRebuilder = new IndexRebuilder({\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n try {\n const result = await this.currentRebuilder.rebuild();\n\n // 成功完成\n this.$message.success(this.$t('sysStatus.rebuildSuccess', {\n count: result.totalFiles.toLocaleString()\n }));\n\n // 刷新索引信息\n setTimeout(() => {\n this.fetchIndexInfo();\n }, 1000);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.rebuilding = false;\n this.isProcessing = false;\n this.currentRebuilder = null;\n this.processingStartTime = null;\n }\n },\n // 备份数据 - 使用前端辅助备份流程\n async backupData() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.backing = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 BackupGenerator 实例\n this.currentBackupGenerator = new BackupGenerator({\n onProgress: progress => this.handleProgress(progress)\n });\n try {\n const result = await this.currentBackupGenerator.generateBackup();\n\n // 成功完成\n const settingsMsg = result.settingsCount > 0 ? this.$t('sysStatus.backupSuccessWithSettings', {\n fileCount: result.fileCount.toLocaleString(),\n settingsCount: result.settingsCount\n }) : this.$t('sysStatus.backupSuccess', {\n count: result.fileCount.toLocaleString()\n });\n this.$message.success(settingsMsg);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.backing = false;\n this.isProcessing = false;\n this.currentBackupGenerator = null;\n this.processingStartTime = null;\n }\n },\n // 选择恢复文件\n selectRestoreFile() {\n if (this.restoring) return;\n this.$refs.fileInput.click();\n },\n // 处理文件选择\n async handleFileSelect(event) {\n const file = event.target.files[0];\n if (!file) return;\n if (!file.name.endsWith('.json')) {\n this.$message.error(this.$t('sysStatus.selectJsonFile'));\n return;\n }\n\n // 确认恢复操作\n try {\n await this.$confirm(this.$t('sysStatus.restoreConfirmMessage'), this.$t('sysStatus.restoreConfirmTitle'), {\n confirmButtonText: this.$t('sysStatus.restoreConfirmOk'),\n cancelButtonText: this.$t('sysStatus.restoreConfirmCancel'),\n type: 'warning'\n });\n await this.restoreData(file);\n } catch (error) {\n if (error !== 'cancel') {\n console.error('确认恢复失败:', error);\n }\n }\n\n // 清除文件选择\n event.target.value = '';\n },\n // 恢复数据 - 使用前端辅助分批恢复流程\n async restoreData(file) {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.restoring = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n try {\n // 解析备份文件\n const fileContent = await file.text();\n let backupData;\n try {\n backupData = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(this.$t('sysStatus.invalidBackupFile'));\n }\n\n // 创建 RestoreProcessor 实例\n this.currentRestoreProcessor = new RestoreProcessor({\n chunkSize: 100,\n // 每批恢复 100 条\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n const result = await this.currentRestoreProcessor.restore(backupData);\n\n // 恢复完成,重置恢复状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n\n // 显示恢复成功消息\n this.$message.success(this.$t('sysStatus.restoreSuccess', {\n files: result.restoredFiles,\n settings: result.restoredSettings\n }));\n\n // 短暂延迟后自动开始重建索引\n await new Promise(resolve => setTimeout(resolve, 500));\n await this.rebuildIndex();\n } catch (error) {\n console.error('恢复数据失败:', error);\n\n // 出错时重置状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(this.$t('sysStatus.restoreFailed') + ': ' + errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n }\n },\n // 格式化时间\n formatTime(timestamp) {\n if (!timestamp) return this.$t('sysStatus.unknown');\n const date = new Date(timestamp);\n return date.toLocaleString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n });\n },\n // 计算百分比\n getPercentage(value, total) {\n if (!total || total === 0) return 0;\n return Math.round(value / total * 100);\n },\n // 计算时间差\n getTimeAgo(timestamp) {\n if (!timestamp) return '';\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n if (days > 0) return this.$t('sysStatus.daysAgo', {\n count: days\n });\n if (hours > 0) return this.$t('sysStatus.hoursAgo', {\n count: hours\n });\n if (minutes > 0) return this.$t('sysStatus.minutesAgo', {\n count: minutes\n });\n return this.$t('sysStatus.justNow');\n },\n // 图片加载失败处理\n handleImageError(type) {\n this.loadErrors[type] = true;\n },\n // 检查是否应该显示预览图\n isValidPreview(type, file) {\n if (this.loadErrors[type]) return false;\n if (!file?.metadata?.FileType) return false;\n return file.metadata.FileType.includes('image') || file.metadata.FileType.includes('video');\n },\n // 打开发布页面\n openReleases() {\n window.open('https://github.com/MarSeventh/CloudFlare-ImgBed/releases', '_blank');\n },\n // 判断是否为图片文件\n isImageFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('image')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'avif', 'heic', 'heif'];\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频文件\n isVideoFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('video')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'm4v', '3gp', 'mpeg', 'mpg'];\n return videoExtensions.includes(extension);\n },\n // 在新窗口打开文件\n openFileInNewTab(file) {\n if (!file?.id) return;\n window.open('/file/' + file.id + '?from=admin', '_blank');\n },\n // 处理进度更新\n handleProgress(progress) {\n this.processingPhase = progress.phase;\n this.processingProgress.message = progress.message || '';\n this.processingProgress.current = progress.current || 0;\n\n // 根据不同阶段计算进度百分比\n if (progress.phase === 'fetching') {\n // 获取阶段:基于已获取的记录数估算(假设总数未知时显示已获取数量)\n this.processingProgress.total = progress.total || 0;\n // 获取阶段占总进度的 60%\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = Math.min(60, progress.current / progress.total * 60);\n } else {\n // 未知总数时,使用对数增长模拟进度\n this.processingProgress.percentage = Math.min(50, Math.log10(progress.current + 1) * 15);\n }\n } else if (progress.phase === 'sorting') {\n // 排序阶段:占 60-70%\n this.processingProgress.percentage = 65;\n this.processingProgress.total = progress.total || this.processingProgress.total;\n } else if (progress.phase === 'uploading') {\n // 上传阶段:占 70-95%\n this.processingProgress.total = progress.total || 0;\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = 70 + progress.current / progress.total * 25;\n }\n } else if (progress.phase === 'finalizing') {\n // 完成阶段:95-100%\n this.processingProgress.percentage = 97;\n } else if (progress.phase === 'building') {\n // 构建备份阶段:70-90%\n this.processingProgress.percentage = 80;\n } else if (progress.phase === 'downloading') {\n // 下载阶段:90-100%\n this.processingProgress.percentage = 95;\n } else if (progress.phase === 'restoring_files') {\n // 恢复文件阶段:0-80%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 0;\n } else if (progress.phase === 'restoring_settings') {\n // 恢复设置阶段:80-100%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 80;\n } else if (progress.phase === 'completed') {\n // 完成\n this.processingProgress.percentage = 100;\n } else if (progress.phase === 'retrying') {\n // 重试阶段:保持当前进度\n this.processingProgress.message = progress.message;\n }\n },\n // 处理错误\n handleError(error) {\n console.error('批量操作错误:', error);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n },\n // 取消当前操作\n cancelOperation() {\n if (this.currentRebuilder) {\n this.currentRebuilder.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentBackupGenerator) {\n this.currentBackupGenerator.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentRestoreProcessor) {\n this.currentRestoreProcessor.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n },\n // 重试操作\n retryOperation() {\n this.processingError = null;\n if (this.rebuilding) {\n this.rebuilding = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.rebuildIndex();\n });\n } else if (this.backing) {\n this.backing = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.backupData();\n });\n }\n },\n // 关闭错误提示\n dismissError() {\n this.processingError = null;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogStatus.vue?vue&type=template&id=776bcef4&scoped=true\"\nimport script from \"./SysCogStatus.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogStatus.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogStatus.vue?vue&type=style&index=0&id=776bcef4&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-776bcef4\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withModifiers as _withModifiers, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"custom-select\", {\n 'is-open': $data.isOpen\n }]),\n style: _normalizeStyle({\n width: $props.width\n })\n }, [_createElementVNode(\"div\", {\n class: \"custom-select-trigger\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleDropdown && $options.toggleDropdown(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-select-value\", {\n 'is-placeholder': !$props.modelValue\n }])\n }, _toDisplayString($options.displayLabel), 3), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"custom-select-arrow\"\n })]), _createVNode(_Transition, {\n name: \"dropdown-fade\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: \"custom-select-dropdown\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.options, option => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: option.value,\n class: _normalizeClass([\"custom-select-option\", {\n 'is-selected': $props.modelValue === option.value\n }]),\n onClick: $event => $options.selectOption(option.value)\n }, [_renderSlot(_ctx.$slots, \"option\", {\n option: option\n }, () => [option.channelType ? (_openBlock(), _createBlock(_component_ChannelIcon, {\n key: 0,\n type: option.channelType,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"type\", \"class\"])) : option.icon ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: option.icon,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"icon\", \"class\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"span\", null, _toDisplayString(option.label), 1)], true)], 10, _hoisted_1);\n }), 128))], 512), [[_vShow, $data.isOpen]])]),\n _: 3\n })], 6);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'CustomSelect',\n components: {\n ChannelIcon\n },\n props: {\n modelValue: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n required: true\n // 格式: [{ value: '', label: '', icon?: '', iconClass?: '', channelType?: '' }]\n },\n placeholder: {\n type: String,\n default: ''\n },\n width: {\n type: String,\n default: '160px'\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n return {\n isOpen: false\n };\n },\n computed: {\n resolvedPlaceholder() {\n return this.placeholder || this.$t('common.select');\n },\n displayLabel() {\n const selected = this.options.find(opt => opt.value === this.modelValue);\n return selected ? selected.label : this.resolvedPlaceholder;\n }\n },\n mounted() {\n document.addEventListener('click', this.handleClickOutside);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleClickOutside);\n },\n methods: {\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n },\n selectOption(value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', value);\n this.isOpen = false;\n },\n handleClickOutside(e) {\n if (!this.$el.contains(e.target)) {\n this.isOpen = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomSelect.vue?vue&type=template&id=b9420432&scoped=true\"\nimport script from \"./CustomSelect.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSelect.vue?vue&type=script&lang=js\"\n\nimport \"./CustomSelect.vue?vue&type=style&index=0&id=b9420432&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b9420432\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-settings\"\n};\nconst _hoisted_2 = {\n class: \"page-header\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"header-actions\"\n};\nconst _hoisted_5 = {\n class: \"group-header\"\n};\nconst _hoisted_6 = {\n class: \"group-title\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"load-balance-switch\"\n};\nconst _hoisted_8 = {\n class: \"switch-label\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"channel-cards\"\n};\nconst _hoisted_10 = [\"onMousemove\", \"onMouseleave\"];\nconst _hoisted_11 = {\n class: \"card-header\"\n};\nconst _hoisted_12 = {\n class: \"card-title\"\n};\nconst _hoisted_13 = {\n class: \"channel-name\"\n};\nconst _hoisted_14 = {\n class: \"card-body\"\n};\nconst _hoisted_15 = {\n class: \"card-info\"\n};\nconst _hoisted_16 = {\n class: \"info-item\"\n};\nconst _hoisted_17 = {\n class: \"info-text\"\n};\nconst _hoisted_18 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_19 = {\n class: \"info-text\"\n};\nconst _hoisted_20 = {\n key: 1,\n class: \"info-item\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n class: \"info-item\"\n};\nconst _hoisted_23 = {\n class: \"info-text\"\n};\nconst _hoisted_24 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_25 = [\"title\"];\nconst _hoisted_26 = {\n class: \"info-item\"\n};\nconst _hoisted_27 = {\n class: \"info-text\"\n};\nconst _hoisted_28 = {\n class: \"info-item\"\n};\nconst _hoisted_29 = {\n class: \"info-text\"\n};\nconst _hoisted_30 = {\n class: \"info-item\"\n};\nconst _hoisted_31 = {\n class: \"info-text\"\n};\nconst _hoisted_32 = {\n class: \"info-item\"\n};\nconst _hoisted_33 = [\"title\"];\nconst _hoisted_34 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_35 = [\"title\"];\nconst _hoisted_36 = {\n key: 0,\n class: \"quota-mini\"\n};\nconst _hoisted_37 = {\n class: \"quota-text\"\n};\nconst _hoisted_38 = {\n class: \"card-actions\"\n};\nconst _hoisted_39 = {\n key: 1,\n class: \"empty-tip\"\n};\nconst _hoisted_40 = {\n class: \"channel-type-option\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"form-warning\",\n style: {\n \"margin-top\": \"0\"\n }\n};\nconst _hoisted_42 = [\"innerHTML\"];\nconst _hoisted_43 = {\n class: \"form-warning\"\n};\nconst _hoisted_44 = {\n class: \"quota-label\"\n};\nconst _hoisted_45 = {\n class: \"quota-status\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_CustomSelect = _resolveComponent(\"CustomSelect\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.title')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.titleTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_CustomSelect, {\n modelValue: $data.channelFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelFilter = $event),\n options: $options.filterOptions,\n placeholder: _ctx.$t('sysUpload.filterPlaceholder'),\n width: \"160px\"\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => $data.showAddDialog = true),\n class: \"add-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.addChannel')), 1)]),\n _: 1\n })])]), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.filteredChannels, channelType => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channelType.value,\n class: \"channel-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_ChannelIcon, {\n type: channelType.value,\n class: \"group-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(channelType.label), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n class: \"channel-count\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelList(channelType.value).length), 1)]),\n _: 2\n }, 1024)]), $options.hasLoadBalance(channelType.value) ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('sysUpload.loadBalance')), 1), _createVNode(_component_el_switch, {\n modelValue: $options.getSettings(channelType.value).loadBalance.enabled,\n \"onUpdate:modelValue\": $event => $options.getSettings(channelType.value).loadBalance.enabled = $event,\n size: \"small\",\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])])) : _createCommentVNode(\"\", true)]), $options.getChannelList(channelType.value).length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.getChannelList(channelType.value), (channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel.name || index,\n class: _normalizeClass([\"channel-card\", [channelType.value, {\n 'disabled': !channel.enabled,\n 'fixed': channel.fixed\n }]]),\n onMousemove: $event => $options.handleCardMouseMove($event, channelType.value, index),\n onMouseleave: $event => $options.handleCardMouseLeave(channelType.value, index)\n }, [_createElementVNode(\"div\", {\n class: \"card-glow\",\n ref_for: true,\n ref: `glow-${channelType.value}-${index}`\n }, null, 512), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(channel.name || _ctx.$t('sysUpload.unnamedChannel')), 1), channel.fixed ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_switch, {\n modelValue: channel.enabled,\n \"onUpdate:modelValue\": $event => channel.enabled = $event,\n size: \"small\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [channelType.value === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_17, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), channel.chatId ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [_createVNode(_component_font_awesome_icon, {\n icon: \"comments\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, \"Channel: \" + _toDisplayString($options.maskText(channel.chatId)), 1)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_21)])) : channelType.value === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"server\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_23, _toDisplayString(channel.bucketName || _ctx.$t('sysUpload.notSet')), 1)]), channel.endpoint ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.endpoint\n }, _toDisplayString(channel.endpoint), 9, _hoisted_25)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_27, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_29, \"Channel: \" + _toDisplayString($options.maskText(channel.channelId)), 1)]), channel.isNitro ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"success\"\n }, {\n default: _withCtx(() => [...(_cache[78] || (_cache[78] = [_createTextVNode(\"Nitro\", -1)]))]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(channel.repo || _ctx.$t('sysUpload.notSet')), 1)]), channel.isPrivate ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.baseUrl\n }, _toDisplayString(channel.baseUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_33)]), channel.publicUrl ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl), 9, _hoisted_35)])) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]), channel.quota?.enabled ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage(channel),\n status: $options.getQuotaStatus(channel),\n \"stroke-width\": 6\n }, null, 8, [\"percentage\", \"status\"]), _createElementVNode(\"span\", _hoisted_37, _toDisplayString($options.getQuotaText(channel)), 1)])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_38, [_createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openDetailDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"eye\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.detail')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openEditDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"danger\",\n size: \"small\",\n onClick: $event => $options.deleteChannel(channelType.value, index),\n disabled: channel.fixed\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])], 42, _hoisted_10);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\",\n class: \"empty-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysUpload.noChannels', {\n type: channelType.label\n })), 1)]))]);\n }), 128)), _createVNode(_component_el_dialog, {\n modelValue: $data.showAddDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showAddDialog = $event),\n title: _ctx.$t('sysUpload.addDialogTitle'),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetAddForm\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showAddDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), $data.newChannel.type !== 'cfr2' ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.confirmAddChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.confirmAdd')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newChannel,\n \"label-position\": \"top\",\n ref: \"addForm\",\n rules: $options.addRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelTypeLabel'),\n prop: \"type\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.newChannel.type,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.newChannel.type = $event),\n placeholder: _ctx.$t('sysUpload.channelTypePlaceholder'),\n style: {\n \"width\": \"100%\"\n },\n onChange: $options.onChannelTypeChange\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.addableChannels, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.value,\n label: ch.label,\n value: ch.value\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_40, [_createVNode(_component_ChannelIcon, {\n type: ch.value,\n class: \"select-option-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(ch.label), 1)])]),\n _: 2\n }, 1032, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.type === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sysUpload.r2ConfigNote')\n }, null, 8, _hoisted_42)])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameImmutableTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.name,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.newChannel.name = $event),\n placeholder: _ctx.$t('sysUpload.channelNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), $data.newChannel.type === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.chatId,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.newChannel.chatId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.chatIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.newChannel.type === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.endpoint,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.newChannel.endpoint = $event),\n placeholder: _ctx.$t('sysUpload.endpointPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.newChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.bucketName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.newChannel.bucketName = $event),\n placeholder: _ctx.$t('sysUpload.bucketNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.region,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.newChannel.region = $event),\n placeholder: _ctx.$t('sysUpload.bucketRegionPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.newChannel.accessKeyId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessKeyIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.newChannel.secretAccessKey = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.secretAccessKeyPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.newChannel.pathStyle = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.newChannel.type === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.channelId,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.newChannel.channelId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.channelIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isNitro,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_43, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.discordWarning')), 1)])], 64)) : $data.newChannel.type === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.repo,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newChannel.repo = $event),\n placeholder: _ctx.$t('sysUpload.repoNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.token,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newChannel.token = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.newChannel.type === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newChannel.baseUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavBaseUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.username,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newChannel.username = $event),\n placeholder: _ctx.$t('sysUpload.webdavUsernamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.password,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newChannel.password = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.webdavPasswordPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.newChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.headersText,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.newChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.newChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)], 64))]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showDetailDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showDetailDialog = $event),\n title: _ctx.$t('sysUpload.detailDialogTitle', {\n name: $data.currentChannel?.name || ''\n }),\n class: \"channel-dialog\",\n onClosed: $options.resetDetailData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showDetailDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.closeBtn')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.openEditFromDetail\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_descriptions, {\n column: 1,\n border: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelNameDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelTypeDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelTypeLabel($data.currentChannelType)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.statusLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: $data.currentChannel?.enabled ? 'success' : 'info'\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.enabled ? _ctx.$t('sysUpload.enabled') : _ctx.$t('sysUpload.disabled')), 1)]),\n _: 1\n }, 8, [\"type\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannel?.fixed ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 0,\n label: _ctx.$t('sysUpload.configSource')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.chatIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.chatId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 2,\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"])) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.endpointLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.endpoint,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.cdnDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.cdnDomain || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.bucketName), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketRegion')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.region), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.pathStyle')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.pathStyle ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.channelId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.nitroMember')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isNitro ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.repoName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.repo), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.privateRepo')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isPrivate ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 6\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.baseUrl,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.username || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $options.formatHeaders($data.currentChannel?.headers),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavCreateDirectory')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.createDirectory !== false ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true), $data.currentChannel?.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 7\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.limitGB) + \" GB\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.threshold) + \"%\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, null, {\n label: _withCtx(() => [_createElementVNode(\"span\", _hoisted_44, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.currentUsage')) + \" \", 1), _createVNode(_component_el_button, {\n link: \"\",\n type: \"primary\",\n onClick: $options.refreshQuota,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\",\n class: _normalizeClass({\n 'fa-spin': $data.quotaLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage($data.currentChannel),\n status: $options.getQuotaStatus($data.currentChannel),\n \"stroke-width\": 16,\n \"text-inside\": true,\n format: () => $options.getQuotaText($data.currentChannel)\n }, null, 8, [\"percentage\", \"status\", \"format\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quota-info\", {\n 'quota-warning': $options.isQuotaExceeded($data.currentChannel)\n }])\n }, _toDisplayString($options.getQuotaStatusText($data.currentChannel)), 3)])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditDialog,\n \"onUpdate:modelValue\": _cache[77] || (_cache[77] = $event => $data.showEditDialog = $event),\n title: _ctx.$t('sysUpload.editDialogTitle', {\n name: $data.editChannel?.name || ''\n }),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetEditData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[76] || (_cache[76] = $event => $data.showEditDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.confirmEditChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.saveChanges')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editChannel,\n \"label-position\": \"top\",\n ref: \"editForm\",\n rules: $options.editRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameEditDisabledTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.name,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.editChannel.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.enableChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.enabled,\n \"onUpdate:modelValue\": _cache[39] || (_cache[39] = $event => $data.editChannel.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.chatId,\n \"onUpdate:modelValue\": _cache[41] || (_cache[41] = $event => $data.editChannel.chatId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[42] || (_cache[42] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[43] || (_cache[43] = $event => $data.editChannel.publicUrl = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[44] || (_cache[44] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[45] || (_cache[45] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[46] || (_cache[46] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[47] || (_cache[47] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.endpoint,\n \"onUpdate:modelValue\": _cache[48] || (_cache[48] = $event => $data.editChannel.endpoint = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[49] || (_cache[49] = $event => $data.editChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.bucketName,\n \"onUpdate:modelValue\": _cache[50] || (_cache[50] = $event => $data.editChannel.bucketName = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.region,\n \"onUpdate:modelValue\": _cache[51] || (_cache[51] = $event => $data.editChannel.region = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[52] || (_cache[52] = $event => $data.editChannel.accessKeyId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[53] || (_cache[53] = $event => $data.editChannel.secretAccessKey = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[54] || (_cache[54] = $event => $data.editChannel.pathStyle = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[55] || (_cache[55] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[56] || (_cache[56] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[57] || (_cache[57] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[58] || (_cache[58] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[59] || (_cache[59] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.channelId,\n \"onUpdate:modelValue\": _cache[60] || (_cache[60] = $event => $data.editChannel.channelId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[61] || (_cache[61] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isNitro,\n \"onUpdate:modelValue\": _cache[62] || (_cache[62] = $event => $data.editChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.repo,\n \"onUpdate:modelValue\": _cache[63] || (_cache[63] = $event => $data.editChannel.repo = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.token,\n \"onUpdate:modelValue\": _cache[64] || (_cache[64] = $event => $data.editChannel.token = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[65] || (_cache[65] = $event => $data.editChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[66] || (_cache[66] = $event => $data.editChannel.baseUrl = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.username,\n \"onUpdate:modelValue\": _cache[67] || (_cache[67] = $event => $data.editChannel.username = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.password,\n \"onUpdate:modelValue\": _cache[68] || (_cache[68] = $event => $data.editChannel.password = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[69] || (_cache[69] = $event => $data.editChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.headersText,\n \"onUpdate:modelValue\": _cache[70] || (_cache[70] = $event => $data.editChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[71] || (_cache[71] = $event => $data.editChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[72] || (_cache[72] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[73] || (_cache[73] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[74] || (_cache[74] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[75] || (_cache[75] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nimport CustomSelect from './CustomSelect.vue';\nexport default {\n components: {\n ChannelIcon,\n CustomSelect\n },\n data() {\n return {\n // 渠道类型筛选\n channelFilter: '',\n // 渠道类型列表\n channels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 可添加的渠道类型\n addableChannels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 各渠道配置\n telegramSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n cfr2Settings: {\n channels: []\n },\n s3Settings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n discordSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n huggingfaceSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n webdavSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n // 弹窗控制\n showAddDialog: false,\n showDetailDialog: false,\n showEditDialog: false,\n // 当前操作的渠道\n currentChannelType: '',\n currentChannelIndex: -1,\n currentChannel: null,\n editChannel: {},\n // 新增渠道表单\n newChannel: {\n type: '',\n name: '',\n enabled: true,\n // Telegram\n botToken: '',\n chatId: '',\n proxyUrl: '',\n // S3\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n // Discord\n channelId: '',\n isNitro: false,\n // HuggingFace\n repo: '',\n token: '',\n isPrivate: false,\n // WebDAV\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n },\n // 容量统计数据\n quotaStats: {},\n quotaLoading: false,\n // 加载状态\n loading: false\n };\n },\n computed: {\n // 筛选下拉框选项\n filterOptions() {\n return [{\n value: '',\n label: this.$t('common.all')\n }, ...this.channels.map(ch => ({\n value: ch.value,\n label: ch.label,\n channelType: ch.value\n }))];\n },\n // 根据筛选条件过滤渠道类型\n filteredChannels() {\n if (!this.channelFilter) {\n return this.channels;\n }\n return this.channels.filter(ch => ch.value === this.channelFilter);\n },\n addRules() {\n return {\n type: [{\n required: true,\n message: this.$t('sysUpload.channelTypePlaceholder'),\n trigger: 'change'\n }],\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n },\n editRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n // 卡片光斑跟随鼠标\n handleCardMouseMove(event, channelType, index) {\n const card = event.currentTarget;\n const rect = card.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '1';\n glowEl[0].style.left = `${x}px`;\n glowEl[0].style.top = `${y}px`;\n }\n },\n handleCardMouseLeave(channelType, index) {\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '0';\n }\n },\n // 获取渠道类型标签\n getChannelTypeLabel(type) {\n const channel = this.channels.find(c => c.value === type);\n return channel ? channel.label : type;\n },\n // 获取渠道列表\n getChannelList(type) {\n return this.getSettings(type)?.channels || [];\n },\n // 获取渠道设置对象\n getSettings(type) {\n const map = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n return map[type];\n },\n // 是否有负载均衡选项\n hasLoadBalance(type) {\n return ['telegram', 's3', 'discord', 'huggingface', 'webdav'].includes(type);\n },\n // 文本脱敏\n maskText(text, showLength = 4) {\n if (!text) return this.$t('sysUpload.notSet');\n if (text.length <= showLength * 2) return '****';\n return text.slice(0, showLength) + '****' + text.slice(-showLength);\n },\n formatHeaders(headers) {\n if (!headers || typeof headers === 'object' && Object.keys(headers).length === 0) {\n return this.$t('sysUpload.notSet');\n }\n if (typeof headers === 'string') {\n return headers;\n }\n return JSON.stringify(headers, null, 2);\n },\n headersToText(headers) {\n if (!headers) return '';\n if (typeof headers === 'string') return headers;\n return JSON.stringify(headers, null, 2);\n },\n parseHeadersText(text) {\n if (!text || !text.trim()) return {};\n try {\n const parsed = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed;\n } catch (error) {\n return null;\n }\n },\n // 打开详情弹窗\n openDetailDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n this.currentChannel = this.getChannelList(type)[index];\n this.showDetailDialog = true;\n },\n // 打开编辑弹窗\n openEditDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n const channel = this.getChannelList(type)[index];\n this.editChannel = JSON.parse(JSON.stringify(channel));\n if (type === 'webdav') {\n this.editChannel.headersText = this.headersToText(this.editChannel.headers);\n this.editChannel.createDirectory = this.editChannel.createDirectory !== false;\n }\n // 确保 quota 对象存在\n if (!this.editChannel.quota) {\n this.editChannel.quota = {\n enabled: false,\n limitGB: 10,\n threshold: 95\n };\n }\n this.showEditDialog = true;\n },\n // 从详情页打开编辑\n openEditFromDetail() {\n this.showDetailDialog = false;\n this.openEditDialog(this.currentChannelType, this.currentChannelIndex);\n },\n // 重置添加表单\n resetAddForm() {\n this.newChannel = {\n type: '',\n name: '',\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 重置详情弹窗数据\n resetDetailData() {\n this.currentChannel = null;\n },\n // 重置编辑弹窗数据\n resetEditData() {\n this.editChannel = {};\n },\n // 渠道类型变更时重置表单\n onChannelTypeChange() {\n // 保留 type 和 name,重置其他字段\n const {\n type,\n name\n } = this.newChannel;\n this.newChannel = {\n type,\n name,\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 确认添加渠道\n confirmAddChannel() {\n this.$refs.addForm.validate(valid => {\n if (!valid) return;\n const {\n type,\n name\n } = this.newChannel;\n const settings = this.getSettings(type);\n\n // 检查是否为保留名称({type}_env)\n const reservedNames = ['Telegram_env', 'R2_env', 'S3_env', 'Discord_env', 'HuggingFace_env', 'WebDAV_env'];\n if (reservedNames.includes(name)) {\n this.$message.warning(this.$t('sysUpload.reservedName'));\n return;\n }\n\n // 检查名称是否重复\n const isDuplicate = settings.channels.some(ch => ch.name === name);\n if (isDuplicate) {\n this.$message.warning(this.$t('sysUpload.duplicateName'));\n return;\n }\n let newChannelData = {\n id: settings.channels.length + 1,\n name: this.newChannel.name,\n type: type,\n savePath: 'database',\n enabled: true,\n fixed: false\n };\n\n // 根据类型添加特定字段\n if (type === 'telegram') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n chatId: this.newChannel.chatId,\n proxyUrl: this.newChannel.proxyUrl\n });\n } else if (type === 's3') {\n Object.assign(newChannelData, {\n endpoint: this.newChannel.endpoint,\n cdnDomain: this.newChannel.cdnDomain,\n bucketName: this.newChannel.bucketName,\n region: this.newChannel.region,\n accessKeyId: this.newChannel.accessKeyId,\n secretAccessKey: this.newChannel.secretAccessKey,\n pathStyle: this.newChannel.pathStyle,\n quota: {\n ...this.newChannel.quota\n }\n });\n } else if (type === 'discord') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n channelId: this.newChannel.channelId,\n proxyUrl: this.newChannel.proxyUrl,\n isNitro: this.newChannel.isNitro\n });\n } else if (type === 'huggingface') {\n Object.assign(newChannelData, {\n repo: this.newChannel.repo,\n token: this.newChannel.token,\n isPrivate: this.newChannel.isPrivate\n });\n } else if (type === 'webdav') {\n const headers = this.parseHeadersText(this.newChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n Object.assign(newChannelData, {\n baseUrl: this.newChannel.baseUrl,\n username: this.newChannel.username,\n password: this.newChannel.password,\n publicUrl: this.newChannel.publicUrl,\n headers,\n createDirectory: this.newChannel.createDirectory !== false,\n quota: {\n ...this.newChannel.quota\n }\n });\n }\n settings.channels.push(newChannelData);\n this.showAddDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 确认编辑渠道\n confirmEditChannel() {\n this.$refs.editForm.validate(valid => {\n if (!valid) return;\n const settings = this.getSettings(this.currentChannelType);\n const currentIndex = this.currentChannelIndex;\n const originalName = settings.channels[currentIndex]?.name || this.editChannel.name;\n const editedChannel = {\n ...this.editChannel,\n name: originalName\n };\n if (this.currentChannelType === 'webdav') {\n const headers = this.parseHeadersText(editedChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n editedChannel.headers = headers;\n editedChannel.createDirectory = editedChannel.createDirectory !== false;\n delete editedChannel.headersText;\n }\n settings.channels[this.currentChannelIndex] = editedChannel;\n this.showEditDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 删除渠道\n deleteChannel(type, index) {\n const channel = this.getChannelList(type)[index];\n if (channel.fixed) {\n this.$message.warning(this.$t('sysUpload.fixedChannelCannotDelete'));\n return;\n }\n this.$confirm(this.$t('sysUpload.deleteChannelConfirm'), this.$t('common.warning'), {\n confirmButtonText: this.$t('common.confirm'),\n cancelButtonText: this.$t('common.cancel'),\n type: 'warning'\n }).then(() => {\n const settings = this.getSettings(type);\n settings.channels.splice(index, 1);\n // 重新调整 id\n settings.channels.forEach((item, i) => {\n item.id = i + 1;\n });\n // 自动保存\n this.saveSettings();\n }).catch(() => {});\n },\n saveSettings() {\n // 保存设置\n const settings = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n fetchWithAuth('/api/manage/sysConfig/upload', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(() => {\n this.$message.success(this.$t('sysOthers.settingsSaved'));\n });\n },\n // 获取容量统计(重新计算)\n async refreshQuota() {\n this.quotaLoading = true;\n try {\n // 使用 POST 请求重新统计容量(会触发索引重建)\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n } else {\n // 如果重新统计失败,尝试获取已有数据\n const getResponse = await fetchWithAuth('/api/manage/quota');\n const getData = await getResponse.json();\n if (getData.success) {\n this.quotaStats = getData.quotaStats || {};\n }\n }\n } catch (error) {\n console.error('Failed to refresh quota stats:', error);\n } finally {\n this.quotaLoading = false;\n }\n },\n // 获取容量统计(仅读取,不重建索引)\n async loadQuotaStats() {\n try {\n const response = await fetchWithAuth('/api/manage/quota');\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.quotaStats || {};\n }\n } catch (error) {\n console.error('Failed to load quota stats:', error);\n }\n },\n // 获取渠道已用容量 (GB)\n getChannelUsedGB(channel) {\n const stats = this.quotaStats[channel.name];\n if (!stats) return 0;\n return (stats.usedMB || 0) / 1024;\n },\n // 获取容量百分比\n getQuotaPercentage(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n const percentage = usedGB / limitGB * 100;\n return Math.min(100, Math.round(percentage * 10) / 10);\n },\n // 获取进度条状态\n getQuotaStatus(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) return 'exception';\n if (percentage >= 80) return 'warning';\n return 'success';\n },\n // 获取容量文本\n getQuotaText(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n return `${usedGB.toFixed(2)} / ${limitGB} GB`;\n },\n // 判断是否超过阈值\n isQuotaExceeded(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n return percentage >= threshold;\n },\n // 获取状态文本\n getQuotaStatusText(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) {\n return `⚠️ 已达到容量阈值 (${threshold}%),渠道写入已暂停`;\n }\n if (percentage >= 80) {\n return `⚡ 容量使用较高,接近阈值`;\n }\n return `✓ 容量正常`;\n },\n // 容量限制开关变化时\n async onQuotaEnabledChange(enabled, channel) {\n if (enabled && channel.name) {\n // 首次启用时,检查是否有该渠道的统计数据\n const stats = this.quotaStats[channel.name];\n if (!stats) {\n // 没有统计数据,提示用户需要重新统计\n this.$confirm(this.$t('sysUpload.quotaInitConfirm'), this.$t('sysUpload.quotaInitTitle'), {\n confirmButtonText: this.$t('sysUpload.quotaInitConfirmBtn'),\n cancelButtonText: this.$t('sysUpload.quotaInitCancelBtn'),\n type: 'info'\n }).then(async () => {\n await this.recalculateQuota();\n }).catch(() => {\n this.$message.info(this.$t('sysUpload.quotaInitLater'));\n });\n }\n }\n },\n // 重新统计容量\n async recalculateQuota() {\n this.quotaLoading = true;\n try {\n this.$message.info(this.$t('sysUpload.quotaCalculating'));\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n this.$message.success(this.$t('sysUpload.quotaCalculateSuccess'));\n } else {\n this.$message.error(this.$t('sysUpload.quotaCalculateError') + (data.error || ''));\n }\n } catch (error) {\n console.error('Failed to recalculate quota:', error);\n this.$message.error(this.$t('sysUpload.quotaCalculateFailed'));\n } finally {\n this.quotaLoading = false;\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/upload').then(response => response.json()).then(data => {\n this.telegramSettings = data.telegram;\n // 确保 R2 渠道有 quota 默认值\n if (data.cfr2 && data.cfr2.channels) {\n data.cfr2.channels = data.cfr2.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.cfr2Settings = data.cfr2;\n // 确保 S3 渠道有 quota 默认值\n if (data.s3 && data.s3.channels) {\n data.s3.channels = data.s3.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.s3Settings = data.s3;\n // 确保 Discord 渠道有默认值\n if (data.discord && data.discord.channels) {\n data.discord.channels = data.discord.channels.map(channel => ({\n ...channel,\n proxyUrl: channel.proxyUrl || ''\n }));\n }\n this.discordSettings = data.discord || {\n loadBalance: {},\n channels: []\n };\n // 确保 HuggingFace 渠道有默认值\n if (data.huggingface && data.huggingface.channels) {\n data.huggingface.channels = data.huggingface.channels.map(channel => ({\n ...channel,\n isPrivate: channel.isPrivate || false\n }));\n }\n this.huggingfaceSettings = data.huggingface || {\n loadBalance: {},\n channels: []\n };\n // 确保 WebDAV 渠道有默认值\n if (data.webdav && data.webdav.channels) {\n data.webdav.channels = data.webdav.channels.map(channel => ({\n ...channel,\n username: channel.username || '',\n password: channel.password || '',\n publicUrl: channel.publicUrl || '',\n headers: channel.headers || {},\n createDirectory: channel.createDirectory !== false,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.webdavSettings = data.webdav || {\n loadBalance: {},\n channels: []\n };\n // 加载容量统计(仅读取,不重建索引)\n this.loadQuotaStats();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogUpload.vue?vue&type=template&id=0082a519&scoped=true\"\nimport script from \"./SysCogUpload.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogUpload.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogUpload.vue?vue&type=style&index=0&id=0082a519&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0082a519\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"save-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"fade-up\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\"floating-save-btn\", {\n 'is-loading': $props.loading\n }]),\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args))\n }, [$props.loading ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"spinner\",\n spin: \"\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"save\"\n })), _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.loading ? _ctx.$t('floatingSave.saving') : _ctx.$t('floatingSave.save')), 1)], 2), [[_vShow, $data.visible]])]),\n _: 1\n });\n}","export default {\n name: 'FloatingSaveButton',\n emits: ['click'],\n props: {\n loading: {\n type: Boolean,\n default: false\n },\n show: {\n type: Boolean,\n default: true\n }\n },\n data() {\n return {\n visible: false\n };\n },\n watch: {\n show: {\n immediate: true,\n handler(val) {\n if (val) {\n // 延迟显示,等待 Element Plus 加载遮罩淡出动画完成\n setTimeout(() => {\n this.visible = true;\n }, 600);\n } else {\n this.visible = false;\n }\n }\n }\n },\n methods: {\n handleClick() {\n if (!this.loading) {\n this.$emit('click');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FloatingSaveButton.vue?vue&type=template&id=9cef95d2&scoped=true\"\nimport script from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\nexport * from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\n\nimport \"./FloatingSaveButton.vue?vue&type=style&index=0&id=9cef95d2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9cef95d2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"security-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"second-title\"\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_6 = {\n class: \"second-title\"\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_8 = {\n class: \"second-title token-title\"\n};\nconst _hoisted_9 = {\n class: \"token-actions\"\n};\nconst _hoisted_10 = {\n class: \"token-table-container\"\n};\nconst _hoisted_11 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_12 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_13 = {\n class: \"token-display\"\n};\nconst _hoisted_14 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_15 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_16 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_17 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_18 = {\n class: \"table-cell-content action-buttons\"\n};\nconst _hoisted_19 = {\n class: \"first-settings\"\n};\nconst _hoisted_20 = {\n class: \"first-title\"\n};\nconst _hoisted_21 = {\n class: \"second-title\"\n};\nconst _hoisted_22 = {\n class: \"second-title\"\n};\nconst _hoisted_23 = {\n class: \"query-param-list\"\n};\nconst _hoisted_24 = {\n class: \"query-param-list\"\n};\nconst _hoisted_25 = {\n class: \"first-settings\"\n};\nconst _hoisted_26 = {\n class: \"first-title\"\n};\nconst _hoisted_27 = {\n class: \"second-title\"\n};\nconst _hoisted_28 = {\n class: \"second-title\"\n};\nconst _hoisted_29 = {\n class: \"second-title\"\n};\nconst _hoisted_30 = {\n class: \"second-title\"\n};\nconst _hoisted_31 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_32 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_33 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_34 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_35 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_36 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_37 = {\n class: \"token-result\"\n};\nconst _hoisted_38 = {\n style: {\n \"margin-bottom\": \"15px\",\n \"color\": \"#e6a23c\"\n }\n};\nconst _hoisted_39 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.$t('sysSecurity.authManagement')), 1), _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.$t('sysSecurity.userAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.user,\n rules: $options.userPassRules,\n ref: \"userPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.uploadPassword'),\n prop: \"authCode\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.authCode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.authSettings.user.authCode = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleUserPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.user._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearUserPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.user._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearUserPassword,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.clearUserPassword = $event),\n onChange: $options.handleClearUserPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showUserPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewUserPassword\",\n key: \"user-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.confirmNewUserPassword,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.authSettings.user.confirmNewUserPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_6, _toDisplayString(_ctx.$t('sysSecurity.adminAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.admin,\n rules: $options.adminPassRules,\n ref: \"adminPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminUsername'),\n prop: \"adminUsername\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminUsername,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.authSettings.admin.adminUsername = $event),\n autocomplete: \"new-password\",\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminPassword'),\n prop: \"adminPassword\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminPassword,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.authSettings.admin.adminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleAdminPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.admin._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.admin._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearAdminPassword,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.clearAdminPassword = $event),\n onChange: $options.handleClearAdminPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showAdminPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewAdminPassword\",\n key: \"admin-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.confirmNewAdminPassword,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.authSettings.admin.confirmNewAdminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.apiTokenManagement')) + \" \", 1), _createElementVNode(\"a\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showCreateTokenDialog = true),\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n })])]), _createElementVNode(\"div\", _hoisted_10, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $data.apiTokens,\n class: \"token-table\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"name\",\n label: _ctx.$t('sysSecurity.tokenName'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(scope.row.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"token\",\n label: _ctx.$t('sysSecurity.tokenValue'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(scope.row.token), 1)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"permissions\",\n label: _ctx.$t('sysSecurity.permissions'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(scope.row.permissions, perm => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: perm,\n size: \"small\",\n class: \"permission-tag\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getPermissionText(perm)), 1)]),\n _: 2\n }, 1024);\n }), 128))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"createdAt\",\n label: _ctx.$t('sysSecurity.createdAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_15, _toDisplayString($options.formatDate(scope.row.createdAt)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.status'),\n \"header-align\": \"center\",\n width: \"90\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tag, {\n type: $options.getTokenStatus(scope.row.expiresAt).status === 'active' ? 'success' : 'danger',\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getTokenStatus(scope.row.expiresAt).label), 1)]),\n _: 2\n }, 1032, [\"type\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.expiresAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.getTokenStatus(scope.row.expiresAt).expiresText), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.operation'),\n fixed: \"right\",\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n onClick: $event => $options.editToken(scope.row)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteToken(scope.row.id)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, $data.tokenLoading]])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"h3\", _hoisted_20, _toDisplayString(_ctx.$t('sysSecurity.uploadManagement')), 1), _createElementVNode(\"h4\", _hoisted_21, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageReview')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageReviewTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.moderate,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.moderate.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.uploadSettings.moderate.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.reviewChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.moderate.channel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.uploadSettings.moderate.channel = $event),\n placeholder: _ctx.$t('sysSecurity.reviewChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"moderatecontent.com\",\n value: \"moderatecontent.com\"\n }), _createVNode(_component_el_option, {\n label: \"nsfwjs\",\n value: \"nsfwjs\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.moderate.channel === 'moderatecontent.com' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.apiKey')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.moderateContentApiKey,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.uploadSettings.moderate.moderateContentApiKey = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.uploadSettings.moderate.channel === 'nsfwjs' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.nsfwApiPath,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadSettings.moderate.nsfwApiPath = $event),\n placeholder: \"https://nsfwjs.your.domain\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.ipQuery')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.ipQueryTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.ipQuery,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableIpQuery')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.ipQuery.enabled,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.uploadSettings.ipQuery.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.ipQueryChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.ipQuery.channel,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.uploadSettings.ipQuery.channel = $event),\n placeholder: _ctx.$t('sysSecurity.ipQueryChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: _ctx.$t('sysSecurity.customApi'),\n value: \"customApi\"\n }, null, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.ipQuery.channel === 'customApi' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.url,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.uploadSettings.ipQuery.customApi.url = $event),\n placeholder: \"https://api.example.com/ip\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.queryParams')\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_23, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.params, (param, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"query-param-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: param.key,\n \"onUpdate:modelValue\": $event => param.key = $event,\n placeholder: _ctx.$t('sysSecurity.paramNamePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_input, {\n modelValue: param.value,\n \"onUpdate:modelValue\": $event => param.value = $event,\n placeholder: _ctx.$t('sysSecurity.paramValuePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryParam(index),\n disabled: $data.uploadSettings.ipQuery.customApi.params.length <= 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryParam\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addQueryParam')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.responseFields')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.responseFieldsTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.responseFields, (field, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"response-field-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.responseFields[index],\n \"onUpdate:modelValue\": $event => $data.uploadSettings.ipQuery.customApi.responseFields[index] = $event,\n placeholder: _ctx.$t('sysSecurity.responseFieldPathPlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, -1),\n disabled: index === 0\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, 1),\n disabled: index === $data.uploadSettings.ipQuery.customApi.responseFields.length - 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryResponseField(index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryResponseField\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addResponseField')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"h3\", _hoisted_26, _toDisplayString(_ctx.$t('sysSecurity.accessManagement')), 1), _createElementVNode(\"h4\", _hoisted_27, _toDisplayString(_ctx.$t('sysSecurity.domainFilter')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.allowedDomains')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.allowedDomainsTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.allowedDomains,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.accessSettings.allowedDomains = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_28, _toDisplayString(_ctx.$t('sysSecurity.whiteListMode')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"accessForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableWhiteList')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableWhiteListTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.whiteListMode,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.accessSettings.whiteListMode = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_29, _toDisplayString(_ctx.$t('sysSecurity.imageTransform')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"imageTransformForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableImageTransform')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableImageTransformTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.imageTransformEnabled,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.accessSettings.imageTransformEnabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), $data.accessSettings.imageTransformEnabled ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n prop: \"imageTransformAllowedSizes\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageTransformAllowedSizes')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageTransformAllowedSizesHint'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.imageTransformAllowedSizes,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.accessSettings.imageTransformAllowedSizes = $event),\n placeholder: _ctx.$t('sysSecurity.imageTransformAllowedSizesPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_30, _toDisplayString(_ctx.$t('sysSecurity.sessionSecurityPolicy')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.secureMode')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.secureModeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.sessionSecure,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.accessSettings.sessionSecure = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.userSessionMaxAge'),\n prop: \"userSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.userSessionMaxAge,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.accessSettings.userSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminSessionMaxAge'),\n prop: \"adminSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.adminSessionMaxAge,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.accessSettings.adminSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_32, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showCreateTokenDialog,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.showCreateTokenDialog = $event),\n title: _ctx.$t('sysSecurity.createTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_34, [_createVNode(_component_el_button, {\n onClick: _cache[28] || (_cache[28] = $event => $data.showCreateTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.createToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.createBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newToken,\n rules: $options.tokenRules,\n ref: \"tokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel'),\n prop: \"name\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newToken.name,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newToken.name = $event),\n placeholder: _ctx.$t('sysSecurity.tokenNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.newToken.permissions,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.neverExpire,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newToken.neverExpire = $event),\n onChange: $options.onCreateNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_el_input_number, {\n modelValue: $data.newToken.expirationValue,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.newToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.autoDelete,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditTokenDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showEditTokenDialog = $event),\n title: _ctx.$t('sysSecurity.editTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_36, [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showEditTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.updateToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.updateBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editingToken,\n rules: $options.editTokenRules,\n ref: \"editTokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editingToken.name,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.editingToken.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.editingToken.permissions,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.editingToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.neverExpire,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.editingToken.neverExpire = $event),\n onChange: $options.onEditNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_el_input_number, {\n modelValue: $data.editingToken.expirationValue,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.editingToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.editingToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[34] || (_cache[34] = $event => $data.editingToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.autoDelete,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.editingToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showTokenResultDialog,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.showTokenResultDialog = $event),\n title: _ctx.$t('sysSecurity.tokenCreatedTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[39] || (_cache[39] = $event => $data.showTokenResultDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.savedBtn')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"p\", _hoisted_38, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"5px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysSecurity.tokenCreatedWarning')), 1)]), _createVNode(_component_el_form, {\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString($data.createdToken.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.fullToken')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.createdToken.token,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.createdToken.token = $event),\n readonly: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.copyToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.copyBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])])), [[_directive_loading, $data.loading]]);\n}","/**\r\n * Token 过期时间工具模块\r\n * 提供 Token 有效期计算、状态判定和向后兼容默认值填充功能\r\n */\r\n\r\n/**\r\n * 时间单位到毫秒的映射(月和年需要特殊处理)\r\n */\r\nconst SIMPLE_UNIT_MS = {\r\n s: 1000,\r\n m: 60 * 1000,\r\n h: 60 * 60 * 1000,\r\n d: 24 * 60 * 60 * 1000,\r\n};\r\n\r\n/**\r\n * 根据基准时间、数值和时间单位计算过期时间\r\n * @param {Date|string} baseTime - 基准时间(Date 对象或 ISO 8601 字符串)\r\n * @param {number} value - 正整数有效期数值\r\n * @param {string} unit - 时间单位:'s','m','h','d','M','Y'\r\n * @returns {string} 过期时间 ISO 8601 字符串\r\n * @throws {Error} 当 value <= 0 或 unit 无效时抛出错误\r\n */\r\nexport function computeExpiresAt(baseTime, value, unit) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new Error('有效期数值必须大于 0');\r\n }\r\n\r\n const base = typeof baseTime === 'string' ? new Date(baseTime) : new Date(baseTime.getTime());\r\n\r\n if (SIMPLE_UNIT_MS[unit]) {\r\n return new Date(base.getTime() + value * SIMPLE_UNIT_MS[unit]).toISOString();\r\n }\r\n\r\n if (unit === 'M') {\r\n base.setUTCMonth(base.getUTCMonth() + value);\r\n return base.toISOString();\r\n }\r\n\r\n if (unit === 'Y') {\r\n base.setUTCFullYear(base.getUTCFullYear() + value);\r\n return base.toISOString();\r\n }\r\n\r\n throw new Error(`无效的时间单位: ${unit}`);\r\n}\r\n\r\n\r\n/**\r\n * 格式化过期时间为可读字符串\r\n * @param {string} isoString - ISO 8601 时间字符串\r\n * @returns {string} 格式化后的时间字符串\r\n */\r\nfunction formatExpiresTime(isoString) {\r\n const date = new Date(isoString);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const hours = String(date.getHours()).padStart(2, '0');\r\n const minutes = String(date.getMinutes()).padStart(2, '0');\r\n const seconds = String(date.getSeconds()).padStart(2, '0');\r\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n}\r\n\r\n/**\r\n * 获取 Token 的状态信息\r\n * @param {string|null} expiresAt - 过期时间 ISO 8601 字符串,null 表示永不过期\r\n * @param {Date} [now=new Date()] - 当前时间\r\n * @returns {{ status: 'active'|'expired', label: '有效'|'已过期', expiresText: string }}\r\n */\r\nexport function getTokenStatus(expiresAt, now = new Date()) {\r\n if (expiresAt === null || expiresAt === undefined) {\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: '永不过期',\r\n };\r\n }\r\n\r\n const expiresDate = new Date(expiresAt);\r\n const currentTime = now instanceof Date ? now : new Date(now);\r\n const formattedTime = formatExpiresTime(expiresAt);\r\n\r\n if (currentTime.getTime() > expiresDate.getTime()) {\r\n return {\r\n status: 'expired',\r\n label: '已过期',\r\n expiresText: formattedTime,\r\n };\r\n }\r\n\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: formattedTime,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * 为缺少过期相关字段的旧 Token 数据填充默认值\r\n * @param {Object} tokenData - Token 数据对象\r\n * @returns {Object} 填充默认值后的新 Token 数据对象\r\n */\r\nexport function applyTokenDefaults(tokenData) {\r\n return {\r\n ...tokenData,\r\n expiresAt: tokenData.expiresAt ?? null,\r\n autoDelete: tokenData.autoDelete ?? false,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nimport { computeExpiresAt, getTokenStatus } from '@/utils/tokenExpiration';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n authSettings: {\n user: {},\n admin: {}\n },\n uploadSettings: {\n moderate: {},\n ipQuery: {\n enabled: false,\n channel: 'customApi',\n customApi: {\n url: '',\n params: [{\n key: 'ip',\n value: '{ip}'\n }],\n responseFields: []\n }\n }\n },\n accessSettings: {},\n apiTokens: [],\n // API Token列表\n // 加载状态\n loading: true,\n tokenLoading: false,\n // 修改密码相关\n oriUserPassword: '',\n // 原上传密码\n oriAdminPassword: '',\n // 原管理端密码\n\n showUserPassConfirm: false,\n // 显示用户密码确认框\n showAdminPassConfirm: false,\n // 显示管理密码确认框\n clearUserPassword: false,\n // 清除用户密码开关\n clearAdminPassword: false,\n // 清除管理密码开关\n\n // Token对话框相关\n showCreateTokenDialog: false,\n showEditTokenDialog: false,\n showTokenResultDialog: false,\n timeUnitOptions: [{\n labelKey: 'sysSecurity.timeUnitSeconds',\n value: 's'\n }, {\n labelKey: 'sysSecurity.timeUnitMinutes',\n value: 'm'\n }, {\n labelKey: 'sysSecurity.timeUnitHours',\n value: 'h'\n }, {\n labelKey: 'sysSecurity.timeUnitDays',\n value: 'd'\n }, {\n labelKey: 'sysSecurity.timeUnitMonths',\n value: 'M'\n }, {\n labelKey: 'sysSecurity.timeUnitYears',\n value: 'Y'\n }],\n newToken: {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n editingToken: {\n id: '',\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n createdToken: {\n name: '',\n token: ''\n }\n };\n },\n computed: {\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n userPassRules() {\n return {\n authCode: [{\n validator: (rule, value, callback) => {\n const urlReservedChars = ['%', '&', '?', '#', '/'];\n const hasReservedChar = urlReservedChars.some(char => value && value.includes(char));\n if (hasReservedChar) {\n callback(new Error(this.$t('sysSecurity.passwordUrlReserved')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }],\n confirmNewUserPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmUploadPassword')));\n } else if (value !== this.authSettings.user.authCode) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n adminPassRules() {\n return {\n confirmNewAdminPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmAdminPassword')));\n } else if (value !== this.authSettings.admin.adminPassword) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n accessRules() {\n const validateSessionMaxAge = (rule, value, callback) => {\n if (!Number.isInteger(value) || value < 1 || value > 3650) {\n callback(new Error(this.$t('sysSecurity.sessionMaxAgeInvalid')));\n } else {\n callback();\n }\n };\n const validateImageTransformAllowedSizes = (rule, value, callback) => {\n if (!this.accessSettings.imageTransformEnabled || !value || !value.trim()) {\n callback();\n return;\n }\n const sizes = value.split(',').map(size => size.trim().toLowerCase()).filter(Boolean);\n const valid = sizes.every(size => {\n const match = size.match(/^(auto|[1-9]\\d*)x(auto|[1-9]\\d*)$/);\n if (!match || match[1] === 'auto' && match[2] === 'auto') return false;\n return match.slice(1).every(dimension => dimension === 'auto' || Number(dimension) <= 4096);\n });\n if (!valid) {\n callback(new Error(this.$t('sysSecurity.imageTransformAllowedSizesInvalid')));\n } else {\n callback();\n }\n };\n return {\n userSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n adminSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n imageTransformAllowedSizes: [{\n validator: validateImageTransformAllowedSizes,\n trigger: ['blur', 'change']\n }]\n };\n },\n tokenRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysSecurity.tokenNameRequired'),\n trigger: 'blur'\n }],\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.newToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n editTokenRules() {\n return {\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.editingToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n normalizeIpQuerySettings(settings = {}) {\n const ipQuery = settings.ipQuery || {};\n const customApi = ipQuery.customApi || {};\n const params = Array.isArray(customApi.params) && customApi.params.length > 0 ? customApi.params.map(param => ({\n key: param?.key || '',\n value: param?.value || ''\n })) : [{\n key: 'ip',\n value: '{ip}'\n }];\n const responseFields = Array.isArray(customApi.responseFields) ? customApi.responseFields.map(field => {\n if (typeof field === 'string') return field;\n return field?.path || '';\n }) : [];\n return {\n ...settings,\n moderate: settings.moderate || {},\n ipQuery: {\n enabled: ipQuery.enabled ?? false,\n channel: ipQuery.channel || 'customApi',\n customApi: {\n url: customApi.url || '',\n params,\n responseFields\n }\n }\n };\n },\n addIpQueryParam() {\n this.uploadSettings.ipQuery.customApi.params.push({\n key: '',\n value: ''\n });\n },\n removeIpQueryParam(index) {\n if (this.uploadSettings.ipQuery.customApi.params.length <= 1) return;\n this.uploadSettings.ipQuery.customApi.params.splice(index, 1);\n },\n addIpQueryResponseField() {\n this.uploadSettings.ipQuery.customApi.responseFields.push('');\n },\n removeIpQueryResponseField(index) {\n this.uploadSettings.ipQuery.customApi.responseFields.splice(index, 1);\n },\n moveIpQueryResponseField(index, direction) {\n const fields = this.uploadSettings.ipQuery.customApi.responseFields;\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= fields.length) return;\n const [field] = fields.splice(index, 1);\n fields.splice(targetIndex, 0, field);\n },\n handleUserPassInput() {\n if (this.authSettings.user.authCode !== this.oriUserPassword) {\n this.showUserPassConfirm = true;\n } else {\n this.showUserPassConfirm = false;\n }\n },\n handleAdminPassInput() {\n if (this.authSettings.admin.adminPassword !== this.oriAdminPassword) {\n this.showAdminPassConfirm = true;\n } else {\n this.showAdminPassConfirm = false;\n }\n },\n handleClearUserPassword(checked) {\n if (checked) {\n this.authSettings.user.authCode = '';\n this.showUserPassConfirm = false;\n }\n },\n handleClearAdminPassword(checked) {\n if (checked) {\n this.authSettings.admin.adminPassword = '';\n this.authSettings.admin.adminUsername = '';\n this.showAdminPassConfirm = false;\n }\n },\n // Token相关方法\n getPermissionText(permission) {\n const permissionMap = {\n 'upload': this.$t('sysSecurity.permUpload'),\n 'delete': this.$t('sysSecurity.permDelete'),\n 'list': this.$t('sysSecurity.permList'),\n 'manage': this.$t('sysSecurity.permManage')\n };\n return permissionMap[permission] || permission;\n },\n formatDate(dateString) {\n return new Date(dateString).toLocaleString('zh-CN');\n },\n async loadApiTokens() {\n this.tokenLoading = true;\n try {\n const response = await fetchWithAuth('/api/manage/apiTokens');\n const data = await response.json();\n this.apiTokens = data.tokens || [];\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenListFailed'));\n } finally {\n this.tokenLoading = false;\n }\n },\n createToken() {\n this.$refs.tokenForm.validate(async valid => {\n if (!valid) return;\n try {\n this.newToken.owner = 'admin'; // 默认所有Token归属管理员\n\n let expiresAt = null;\n let autoDelete = false;\n if (!this.newToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.newToken.expirationValue, this.newToken.expirationUnit);\n autoDelete = this.newToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: this.newToken.name,\n owner: this.newToken.owner,\n permissions: this.newToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.createdToken = {\n name: data.name,\n token: data.token\n };\n this.showCreateTokenDialog = false;\n this.showTokenResultDialog = true;\n this.newToken = {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n };\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenCreateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenCreateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenCreateFailed'));\n }\n });\n },\n editToken(token) {\n const hasExpiration = token.expiresAt !== null && token.expiresAt !== undefined;\n this.editingToken = {\n id: token.id,\n name: token.name,\n owner: token.owner,\n permissions: [...token.permissions],\n neverExpire: !hasExpiration,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: token.autoDelete || false\n };\n this.showEditTokenDialog = true;\n },\n updateToken() {\n this.$refs.editTokenForm.validate(async valid => {\n if (!valid) return;\n try {\n let expiresAt = null;\n let autoDelete = false;\n if (!this.editingToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.editingToken.expirationValue, this.editingToken.expirationUnit);\n autoDelete = this.editingToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tokenId: this.editingToken.id,\n permissions: this.editingToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.showEditTokenDialog = false;\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenUpdateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenUpdateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenUpdateFailed'));\n }\n });\n },\n async deleteToken(tokenId) {\n try {\n await this.$confirm(this.$t('sysSecurity.tokenDeleteConfirm'), this.$t('sysSecurity.tokenDeleteConfirmTitle'), {\n confirmButtonText: this.$t('sysSecurity.tokenDeleteConfirmOk'),\n cancelButtonText: this.$t('sysSecurity.tokenDeleteConfirmCancel'),\n type: 'warning'\n });\n const response = await fetchWithAuth(`/api/manage/apiTokens?id=${tokenId}`, {\n method: 'DELETE'\n });\n const data = await response.json();\n if (response.ok) {\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenDeleteSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenDeleteFailed'));\n }\n } catch (error) {\n if (error !== 'cancel') {\n this.$message.error(this.$t('sysSecurity.tokenDeleteFailed'));\n }\n }\n },\n async copyToken() {\n try {\n await navigator.clipboard.writeText(this.createdToken.token);\n this.$message.success(this.$t('sysSecurity.tokenCopied'));\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.copyFailed'));\n }\n },\n onCreateNeverExpireChange(val) {\n if (val) {\n this.newToken.autoDelete = false;\n }\n },\n onEditNeverExpireChange(val) {\n if (val) {\n this.editingToken.autoDelete = false;\n }\n },\n getTokenStatus(expiresAt) {\n return getTokenStatus(expiresAt);\n },\n saveSettings() {\n // 所有表单的Promise数组\n let validationPromises = [];\n\n // 验证用户密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.userPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证管理密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.adminPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证会话安全策略表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.accessForm.validate(valid => {\n resolve(valid);\n });\n }));\n validationPromises.push(new Promise(resolve => {\n this.$refs.imageTransformForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 等待所有验证完成\n Promise.all(validationPromises).then(results => {\n const isValid = results.every(valid => valid);\n if (!isValid) {\n return;\n }\n\n // 验证会话有效期为 1-3650 的正整数\n if (this.accessSettings.userSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.userSessionMaxAge) || this.accessSettings.userSessionMaxAge > 3650 || this.accessSettings.adminSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.adminSessionMaxAge) || this.accessSettings.adminSessionMaxAge > 3650) {\n this.$message.error(this.$t('sysSecurity.sessionMaxAgeInvalid'));\n return;\n }\n const settings = {\n auth: this.authSettings,\n upload: this.uploadSettings,\n access: this.accessSettings\n };\n // 不保存确认密码相关字段\n delete settings.auth.user.confirmNewUserPassword;\n delete settings.auth.admin.confirmNewAdminPassword;\n\n // 标记清除密码\n if (this.clearUserPassword) {\n settings.auth.user._clear = true;\n settings.auth.user.authCode = '';\n }\n if (this.clearAdminPassword) {\n settings.auth.admin._clear = true;\n settings.auth.admin.adminPassword = '';\n }\n fetchWithAuth('/api/manage/sysConfig/security', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(res => res.json()).then(data => {\n // 管理端密码变更后,当前会话已被清除,需要重新登录\n if (data.adminPasswordChanged) {\n const msg = this.$t('sysSecurity.adminPasswordChangedRelogin');\n this.$message.warning(msg);\n setTimeout(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n }, 1500);\n return;\n }\n this.$message.success(this.$t('sysSecurity.settingsSaved'));\n // 保存成功后重置密码字段为空(后端已处理)\n this.authSettings.user.authCode = '';\n this.authSettings.admin.adminPassword = '';\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n // 标记已有密码(如果用户刚设置了密码,且不是清除操作)\n if (settings.auth.user.authCode && !settings.auth.user._clear) {\n this.authSettings.user._hasPassword = true;\n } else if (settings.auth.user._clear) {\n this.authSettings.user._hasPassword = false;\n }\n if (settings.auth.admin.adminPassword && !settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = true;\n } else if (settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = false;\n }\n this.showUserPassConfirm = false;\n this.showAdminPassConfirm = false;\n this.clearUserPassword = false;\n this.clearAdminPassword = false;\n }).catch(() => {\n // 如果请求过程中 session 已失效导致 fetchWithAuth 跳转,忽略后续错误\n });\n });\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/security').then(response => response.json()).then(data => {\n this.authSettings = data.auth;\n this.uploadSettings = this.normalizeIpQuerySettings(data.upload);\n this.accessSettings = {\n imageTransformEnabled: false,\n imageTransformAllowedSizes: '',\n ...data.access\n };\n\n // 密码从后端返回为空(安全考虑),记录原始空值\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n this.authSettings.user.confirmNewUserPassword = '';\n this.authSettings.admin.confirmNewAdminPassword = '';\n\n // 加载API Token列表\n this.loadApiTokens();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogSecurity.vue?vue&type=template&id=264510a6&scoped=true\"\nimport script from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogSecurity.vue?vue&type=style&index=0&id=264510a6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-264510a6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"page-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-title\"\n};\nconst _hoisted_3 = {\n key: 5,\n class: \"announcement-refresh-option\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedSettings, (categoryGroup, categoryName) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: categoryName,\n class: \"first-settings\"\n }, [_createElementVNode(\"h3\", _hoisted_2, _toDisplayString(categoryName), 1), _createVNode(_component_el_form, {\n model: $data.settings,\n \"label-width\": \"150px\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(categoryGroup, (setting, index) => {\n return _openBlock(), _createBlock(_component_el_form_item, {\n key: setting.id,\n class: _normalizeClass({\n 'announcement-manual-height': setting.id === 'announcement' && $data.announcementManualHeight !== null\n }),\n style: _normalizeStyle(setting.id === 'announcement' && $data.announcementManualHeight !== null ? {\n '--announcement-manual-height': `${$data.announcementManualHeight}px`\n } : undefined)\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString($options.localized(setting, 'label')) + \" \", 1), setting.tooltip ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: $options.localized(setting, 'tooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [setting.type === 'select' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 0,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(setting.options, option => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: option.value,\n label: $options.localizedOption(option),\n value: option.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'channelName' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 1,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: !$options.currentUploadChannel || $options.currentChannelList.length === 0,\n placeholder: _ctx.$t('sysPage.channelSelectPlaceholder'),\n clearable: \"\",\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'boolean' ? (_openBlock(), _createBlock(_component_el_switch, {\n key: 2,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\"])) : setting.type === 'textarea' ? (_openBlock(), _createBlock(_component_el_input, {\n key: 3,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n type: \"textarea\",\n autosize: {\n minRows: 2,\n maxRows: setting.id === 'announcement' ? 8 : undefined\n },\n resize: \"vertical\",\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n onMousedown: $event => $options.handleAnnouncementResizeStart($event, setting)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"autosize\", \"disabled\", \"placeholder\", \"onMousedown\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 4,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])), setting.id === 'announcement' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_el_checkbox, {\n modelValue: $data.refreshAnnouncement,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.refreshAnnouncement = $event)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysPage.refreshAnnouncement')), 1)]),\n _: 1\n }, 8, [\"modelValue\"])])) : _createCommentVNode(\"\", true)]),\n _: 2\n }, 1032, [\"class\", \"style\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"model\"])]);\n }), 128)), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport axios from '@/utils/axios';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n config: []\n },\n // 加载状态\n loading: true,\n // 即使公告内容未变化,也在本次保存时刷新公告已读状态\n refreshAnnouncement: false,\n // 公告文本域手动拖拽后的高度\n announcementManualHeight: null,\n announcementResizeMouseUpHandler: null,\n // 可用渠道列表\n availableChannels: {}\n };\n },\n computed: {\n isEn() {\n return this.$i18n.locale === 'en';\n },\n // 根据category将配置项分组\n groupedSettings() {\n const grouped = {};\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n const category = this.isEn ? setting.category_en || setting.category || this.$t('sysPage.otherSettings') : setting.category || this.$t('sysPage.otherSettings');\n if (!grouped[category]) {\n grouped[category] = [];\n }\n grouped[category].push(setting);\n });\n }\n return grouped;\n },\n // 当前选择的上传渠道\n currentUploadChannel() {\n const channelSetting = this.settings.config?.find(s => s.id === 'defaultUploadChannel');\n return channelSetting?.value || '';\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.currentUploadChannel] || [];\n }\n },\n watch: {\n // 监听上传渠道变化,清空渠道名称(如果不在新列表中)\n currentUploadChannel(newVal, oldVal) {\n if (newVal !== oldVal) {\n const channelNameSetting = this.settings.config?.find(s => s.id === 'defaultChannelName');\n if (channelNameSetting) {\n const newChannelList = this.availableChannels[newVal] || [];\n if (!newChannelList.some(ch => ch.name === channelNameSetting.value)) {\n channelNameSetting.value = '';\n }\n }\n }\n }\n },\n methods: {\n localized(item, field) {\n if (this.isEn && item[field + '_en']) return item[field + '_en'];\n return item[field] || '';\n },\n localizedOption(option) {\n if (this.isEn && option.label_en) return option.label_en;\n return option.label;\n },\n handleAnnouncementResizeStart(event, setting) {\n if (setting.id !== 'announcement') return;\n const textarea = event.target.closest?.('textarea');\n if (!textarea) return;\n const rect = textarea.getBoundingClientRect();\n const resizeHandleSize = 24;\n const isResizeHandle = event.clientX >= rect.right - resizeHandleSize && event.clientY >= rect.bottom - resizeHandleSize;\n if (!isResizeHandle) return;\n const formItem = textarea.closest('.el-form-item');\n if (this.announcementResizeMouseUpHandler) {\n window.removeEventListener('mouseup', this.announcementResizeMouseUpHandler);\n }\n const startHeight = textarea.offsetHeight;\n textarea.style.height = `${startHeight}px`;\n formItem?.classList.remove('announcement-manual-height');\n this.announcementResizeMouseUpHandler = () => {\n const resizedHeight = textarea.offsetHeight;\n const manualHeight = Math.abs(resizedHeight - startHeight) > 1 ? resizedHeight : this.announcementManualHeight;\n if (manualHeight !== null) {\n this.announcementManualHeight = manualHeight;\n formItem?.style.setProperty('--announcement-manual-height', `${manualHeight}px`);\n formItem?.classList.add('announcement-manual-height');\n }\n this.announcementResizeMouseUpHandler = null;\n };\n window.addEventListener('mouseup', this.announcementResizeMouseUpHandler, {\n once: true\n });\n },\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/page', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n ...this.settings,\n refreshAnnouncement: this.refreshAnnouncement\n })\n }).then(() => {\n this.refreshAnnouncement = false;\n this.$message.success(this.$t('sysPage.settingsSaved'));\n });\n },\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\n if (response.data) {\n this.availableChannels = response.data;\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n beforeUnmount() {\n if (this.announcementResizeMouseUpHandler) {\n window.removeEventListener('mouseup', this.announcementResizeMouseUpHandler);\n }\n },\n mounted() {\n this.loading = true;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/page').then(response => response.json()).then(data => {\n this.settings = data;\n // 初始化配置项默认值,并规范化布尔类型\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n if ((setting.value === undefined || setting.value === null || setting.value === '') && setting.default !== undefined) {\n setting.value = setting.default;\n }\n if (setting.type === 'boolean') {\n // 将字符串转换为布尔值\n if (typeof setting.value === 'string') {\n setting.value = setting.value === 'true';\n }\n }\n });\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogPage.vue?vue&type=template&id=342e4dda&scoped=true\"\nimport script from \"./SysCogPage.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogPage.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogPage.vue?vue&type=style&index=0&id=342e4dda&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-342e4dda\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"others-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"first-title\"\n};\nconst _hoisted_5 = {\n class: \"first-title\"\n};\nconst _hoisted_6 = {\n class: \"first-title\"\n};\nconst _hoisted_7 = [\"innerHTML\"];\nconst _hoisted_8 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.remoteTelemetry')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.remoteTelemetryTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.telemetry,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.telemetry.enabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.settings.telemetry.enabled = $event),\n disabled: $data.settings.telemetry.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_4, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.cloudflareApiToken')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.cloudflareApiTokenTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.cloudflareApiToken,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.zoneId')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_ZONE_ID,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.settings.cloudflareApiToken.CF_ZONE_ID = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.accountEmail')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_EMAIL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.settings.cloudflareApiToken.CF_EMAIL = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: \"API Key\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_API_KEY,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.settings.cloudflareApiToken.CF_API_KEY = $event),\n disabled: $data.settings.cloudflareApiToken.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_5, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.randomImageApi')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.randomImageApiTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.randomImageAPI,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.randomImageAPI.enabled,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.settings.randomImageAPI.enabled = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"randomImageAPI.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.directory')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.directoryTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.randomImageAPI.allowedDir,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.settings.randomImageAPI.allowedDir = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_6, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.publicBrowse')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.publicBrowseTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.publicBrowse,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.publicBrowse.enabled,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.settings.publicBrowse.enabled = $event),\n disabled: $data.settings.publicBrowse.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"publicBrowse.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.openDirectory')), 1), _createVNode(_component_el_tooltip, {\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n content: _withCtx(() => [_createElementVNode(\"div\", {\n style: {\n \"max-width\": \"320px\",\n \"line-height\": \"1.6\"\n },\n innerHTML: _ctx.$t('sysOthers.openDirectoryTooltip')\n }, null, 8, _hoisted_7)]),\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.publicBrowse.allowedDir,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.settings.publicBrowse.allowedDir = $event),\n disabled: $data.settings.publicBrowse.fixed,\n placeholder: \"wallpaper,photos,album\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.webdav')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.webdavTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.webDAV,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.webDAV.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.settings.webDAV.enabled = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.username,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.settings.webDAV.username = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.password,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.settings.webDAV.password = $event),\n disabled: $data.settings.webDAV.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUploadChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.uploadChannel,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.settings.webDAV.uploadChannel = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('sysOthers.webdavDefaultChannel'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"Telegram\",\n value: \"telegram\"\n }), _createVNode(_component_el_option, {\n label: \"Cloudflare R2\",\n value: \"cfr2\"\n }), _createVNode(_component_el_option, {\n label: \"S3\",\n value: \"s3\"\n }), _createVNode(_component_el_option, {\n label: \"Discord\",\n value: \"discord\"\n }), _createVNode(_component_el_option, {\n label: \"HuggingFace\",\n value: \"huggingface\"\n }), _createVNode(_component_el_option, {\n label: \"WebDAV\",\n value: \"webdav\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.settings.webDAV.uploadChannel && $options.webdavChannelList.length > 1 ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysOthers.webdavChannelName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.channelName,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.settings.webDAV.channelName = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.webdavChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n telemetry: {},\n randomImageAPI: {},\n cloudflareApiToken: {},\n webDAV: {},\n publicBrowse: {}\n },\n availableChannels: {},\n // 可用渠道列表\n // 加载状态\n loading: true\n };\n },\n computed: {\n // WebDAV 当前渠道类型对应的渠道列表\n webdavChannelList() {\n const channelType = this.settings.webDAV?.uploadChannel;\n return channelType ? this.availableChannels[channelType] || [] : [];\n }\n },\n watch: {\n 'settings.webDAV.uploadChannel'() {\n // 切换渠道类型时清空指定的渠道名称\n if (this.settings.webDAV) {\n this.settings.webDAV.channelName = '';\n }\n }\n },\n methods: {\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/others', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysOthers.settingsSaved')));\n },\n async fetchAvailableChannels() {\n try {\n const response = await fetchWithAuth('/api/channels');\n if (response.ok) {\n this.availableChannels = await response.json();\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/others').then(response => response.json()).then(data => {\n this.settings = data;\n }).finally(() => {\n this.loading = false;\n });\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogOthers.vue?vue&type=template&id=69ae97d8&scoped=true\"\nimport script from \"./SysCogOthers.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogOthers.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogOthers.vue?vue&type=style&index=0&id=69ae97d8&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-69ae97d8\"]])\n\nexport default __exports__","import \"core-js/modules/es.array.push.js\";\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport SysConfigTabs from '@/components/config/SysConfigTabs.vue';\nimport SysCogStatus from '@/components/config/SysCogStatus.vue';\nimport SysCogUpload from '@/components/config/SysCogUpload.vue';\nimport SysCogSecurity from '@/components/config/SysCogSecurity.vue';\nimport SysCogPage from '@/components/config/SysCogPage.vue';\nimport SysCogOthers from '@/components/config/SysCogOthers.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'SystemConfig',\n mixins: [backgroundManager],\n data() {\n return {\n activeIndex: 'status',\n isSidebarCollapse: false\n };\n },\n watch: {\n // 监听锚点变化\n '$route.hash': {\n immediate: true,\n handler(newHash) {\n this.activeIndex = newHash.replace('#', '');\n window.scrollTo(0, 0); // 滚动到页面顶部\n }\n },\n activeIndex(newIndex) {\n // 更新锚点\n const hash = `#${newIndex}`;\n this.$router.push({\n hash\n });\n }\n },\n components: {\n DashboardTabs,\n SysConfigTabs,\n SysCogStatus,\n SysCogUpload,\n SysCogSecurity,\n SysCogPage,\n SysCogOthers\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n // 根据锚点动态返回对应的组件\n currentComponent() {\n const hash = this.$route.hash.replace('#', '');\n switch (hash) {\n case 'status':\n return SysCogStatus;\n case 'upload':\n return SysCogUpload;\n case 'security':\n return SysCogSecurity;\n case 'page':\n return SysCogPage;\n case 'others':\n return SysCogOthers;\n default:\n return SysCogStatus;\n }\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n // 设置默认锚点\n setDefaultHash() {\n const defaultHash = '#status'; // 默认锚点\n window.location.hash = defaultHash;\n this.activeIndex = defaultHash.replace('#', '');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n\n // 如果 URL 中没有锚点,则设置默认锚点\n if (!window.location.hash) {\n this.setDefaultHash();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SystemConfig.vue?vue&type=template&id=7e9e1ae0&scoped=true\"\nimport script from \"./SystemConfig.vue?vue&type=script&lang=js\"\nexport * from \"./SystemConfig.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/admin-common.css?vue&type=style&index=0&id=7e9e1ae0&scoped=true&lang=css&external\"\nimport \"./SystemConfig.vue?vue&type=style&index=1&id=7e9e1ae0&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7e9e1ae0\"]])\n\nexport default __exports__","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","isCollapse","ref","style","sidebarStyle","menuItems","item","key","index","activeIndex","onClick","$event","handleSelect","icon","$t","titleKey","args","toggleCollapse","name","props","type","String","default","Boolean","data","expandedWidth","computed","collapsedWidth","window","innerWidth","this","width","watch","$nextTick","measureWidth","methods","$emit","checkMobile","isMobile","el","$refs","sidebar","prevWidth","prevTransition","transition","wasCollapsed","classList","contains","remove","offsetWidth","natural","scrollWidth","add","mounted","addEventListener","beforeDestroy","removeEventListener","__exports__","_component_DashboardTabs","_component_el_tooltip","_component_el_header","_component_SysConfigTabs","activeTab","disabled","disableTooltip","content","placement","handleLogout","_","isSidebarCollapse","currentComponent","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","inputStart","inputmode","startDateLabel","onChange","handleManualInput","trim","rangeSeparator","inputEnd","endDateLabel","previousMonthLabel","goToPreviousMonth","monthTitle","nextMonthLabel","goToNextMonth","weekdayLabels","weekday","calendarDays","day","isCurrentMonth","isToday","draftStart","draftEnd","isInRange","selectDay","dayOfMonth","DAY_MS","padDatePart","value","padStart","formatDateKey","date","getFullYear","getMonth","getDate","parseDateKey","match","year","Number","month","Date","setHours","shiftMonth","amount","modelValue","Array","emits","today","displayYear","displayMonth","awaitingEnd","monthStart","start","getDay","todayKey","from","length","getTime","immediate","handler","syncFromModel","startDate","endDate","displayDate","range","commitRange","startKey","endKey","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_component_el_button","_component_el_radio_button","_component_el_radio_group","_component_DateRangeCalendar","_component_el_dialog","_component_Line","_component_Doughnut","_component_el_progress","_component_el_image","_directive_loading","systemHealthState","systemHealthLabel","currentDateLabel","greetingTitle","systemStatusSummary","datetime","currentTime","toISOString","currentTimeLabel","timeZoneLabel","fetchIndexInfo","indexInfo","totalFiles","toLocaleString","formatTime","lastUpdated","getTimeAgo","openReleases","version","circle","openTrendDateDialog","trendGroupBy","size","label","trendDatePickerVisible","title","trendDateDialogWidth","trendDateRange","handleTrendDateRangeChange","hasTrendData","uploadTrendChartData","options","lineChartOptions","Object","keys","channelStats","channelChartData","chartOptions","count","channel","background","getChartColor","getPercentage","typeStats","typeChartData","aggregatedTypeStats","status","getTypeChartColor","isProcessing","phaseDescription","Math","round","processingProgress","percentage","current","total","estimatedTimeRemaining","message","plain","cancelOperation","processingError","suggestion","recoverable","retryOperation","dismissError","loading","rebuilding","rebuildIndex","backing","backupData","accept","handleFileSelect","restoring","selectRestoreFile","newestFile","oldestFile","openFileInNewTab","isImageFile","loadErrors","src","id","fit","onError","handleImageError","isVideoFile","muted","loop","autoplay","metadata","FileName","TimeStamp","v","lim","l","h","max","min","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","a","b","c","d","e","f","hex","h1","h2","eq","isShort","r","g","hexParse","str","ret","len","alpha","hexString","undefined","HUE_RE","hsl2rgbn","s","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","rgb2hsl","calln","isArray","map","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","exec","p1","p2","rotate","deg","hslString","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","j","ok","nk","replace","parseInt","names","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","to","pow","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","charAt","Color","constructor","_rgb","_valid","valid","obj","mix","color","weight","c1","c2","w2","p","w1","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","noop","uid","isNullOrUndef","prototype","toString","call","slice","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","thisArg","apply","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","source","target","create","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","o","y","_splitKey","parts","split","part","push","_getKeyResolver","resolveObjectKey","resolver","_capitalize","toUpperCase","defined","isFunction","setsEqual","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","roundedRange","niceRange","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","describe","_fallback","_indexable","_scriptable","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","border","dash","dashOffset","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope$1","node","root","scope","Defaults","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","initial","currentStep","_refresh","_update","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","complete","progress","listen","cb","reduce","acc","_duration","cancel","animator","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","update","elapsed","wait","promises","Promise","rej","resolved","Animations","config","_properties","configure","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","anim","all","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","shift","createDatasetContext","createDataContext","dataIndex","raw","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","$bar","visibleMetas","concat","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","_defineProperty","BarController","super","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","_index_","_value_","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","useBorderRadius","borderRadius","fontColor","lineDash","lineDashOffset","lineJoin","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","abstract","DateAdapterBase","members","init","formats","diff","startOf","endOf","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","defaultRoutes","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","clipSelf","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","LineElement","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","SQRT2","yBoxTop","xBoxLeft","textDirection","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","_element","afterEvent","ci","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","animate","INTERVALS","millisecond","common","second","minute","hour","week","quarter","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","CommonProps","required","datasetIdKey","updateMode","A11yProps","ariaLabel","ariaDescribedby","Props","destroyDelay","compatProps","internals","attrs","toRawIfProxy","isProxy","toRaw","cloneProxy","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","addedDatasets","nextDataset","currentDataset","cloneData","nextData","defineComponent","setup","param","expose","slots","canvasRef","chartRef","shallowRef","renderChart","clonedData","proxiedData","Chart$1","destroyChart","onMounted","onUnmounted","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevOptions","prevLabels","prevDatasets","nextTick","deep","role","createTypedChart","registerables","reforwardRef","Doughnut","Line","BatchOperationError","code","ERROR_HANDLERS","details","NETWORK","ABORT","createError","Response","TypeError","BatchProcessor","batchSize","abortController","fetchAllRecords","includeValue","AbortController","allRecords","totalFetched","batchCount","signal","aborted","response","fetchBatch","records","nextCursor","phase","batchError","URLSearchParams","fetchWithAuth","errorDetails","errorData","json","success","totalProcessed","abort","isAborted","IndexRebuilder","chunkSize","maxRetries","retryDelay","sessionId","generateSessionId","fetchConfig","databaseType","rebuild","processor","sortByTimestampDescending","chunks","splitIntoChunks","uploadChunkWithRetry","finalize","timestampA","timestampB","chunkId","lastError","attempt","uploadChunk","sleep","checksum","calculateChecksum","headers","createHttpError","totalChunks","random","encoder","TextEncoder","dataBuffer","encode","crypto","subtle","hashBuffer","digest","hashArray","Uint8Array","imul","ms","BackupGenerator","generateBackup","packageInfo","fileCount","files","settings","record","fetchSettings","downloadBackup","settingsCount","blob","Blob","url","URL","createObjectURL","createElement","href","download","appendChild","click","removeChild","revokeObjectURL","RestoreProcessor","fileEntries","settingEntries","totalSettings","totalItems","restoredFiles","restoredSettings","failedFiles","failedSettings","fileChunks","chunkData","fromEntries","restoredCount","failedCount","settingChunks","backupTimestamp","formatDateInput","getDefaultTrendDateRange","components","DateRangeCalendar","indexInfoLoaded","indexInfoError","clockTimer","newest","oldest","channelColors","typeColors","trendColors","processingPhase","processingStartTime","currentRebuilder","currentBackupGenerator","currentRestoreProcessor","currentLocale","$i18n","indexedFileCount","uploadChannelCount","getHours","channels","DateTimeFormat","hour12","timeZone","resolvedOptions","offsetMinutes","getTimezoneOffset","absoluteMinutes","hours","minutes","stats","aggregatedStats","mappedStatus","currentTrendGroup","trend","uploadTrend","groupBy","series","trendRawLabels","trendRangeCrossesYear","years","extractTrendLabelDates","trendDisplayLabels","formatTrendAxisLabel","totalColor","hexToRgba","pointBackgroundColor","pointBorderColor","pointRadius","pointHoverRadius","getTrendColor","formatTrendSeriesName","toFixed","totalEstimated","seconds","remainingMinutes","phaseMap","setInterval","beforeUnmount","clearInterval","isOther","dates","formatSingleDate","includeYear","monthDay","endLabel","getTrendDateRangeParams","action","timezoneOffset","trendMaxPoints","trendSeriesLimit","trendStartDate","trendEndDate","$message","warning","handleProgress","handleError","errorMessage","settingsMsg","fileInput","file","$confirm","confirmButtonText","cancelButtonText","restoreData","fileContent","parseError","days","isValidPreview","FileType","open","fileName","extension","substring","imageExtensions","videoExtensions","_component_ChannelIcon","isOpen","toggleDropdown","displayLabel","selectOption","$slots","channelType","iconClass","ChannelIcon","placeholder","resolvedPlaceholder","selected","opt","handleClickOutside","$el","_component_CustomSelect","_component_el_tag","_component_el_switch","_component_el_option","_component_el_select","_component_el_form_item","_component_el_input","_component_el_input_number","_component_el_form","_component_el_descriptions_item","_component_el_descriptions","channelFilter","filterOptions","showAddDialog","filteredChannels","getChannelList","hasLoadBalance","getSettings","loadBalance","saveSettings","fixed","onMousemove","handleCardMouseMove","onMouseleave","handleCardMouseLeave","ref_for","maskText","botToken","chatId","publicUrl","bucketName","endpoint","channelId","isNitro","repo","isPrivate","baseUrl","quota","getQuotaPercentage","getQuotaStatus","getQuotaText","openDetailDialog","openEditDialog","deleteChannel","onClosed","resetAddForm","newChannel","confirmAddChannel","model","rules","addRules","onChannelTypeChange","addableChannels","ch","innerHTML","proxyUrl","cdnDomain","region","accessKeyId","secretAccessKey","pathStyle","limitGB","threshold","token","username","password","headersText","autosize","minRows","createDirectory","showDetailDialog","currentChannel","resetDetailData","openEditFromDetail","column","getChannelTypeLabel","currentChannelType","readonly","formatHeaders","link","refreshQuota","quotaLoading","isQuotaExceeded","getQuotaStatusText","showEditDialog","editChannel","resetEditData","confirmEditChannel","editRules","onQuotaEnabledChange","CustomSelect","telegramSettings","cfr2Settings","s3Settings","discordSettings","huggingfaceSettings","webdavSettings","currentChannelIndex","quotaStats","pattern","card","currentTarget","refKey","glowEl","telegram","cfr2","s3","discord","huggingface","webdav","showLength","headersToText","parseHeadersText","addForm","validate","reservedNames","isDuplicate","newChannelData","savePath","editForm","currentIndex","originalName","editedChannel","catch","getResponse","getData","loadQuotaStats","getChannelUsedGB","usedMB","usedGB","async","recalculateQuota","finally","handleClick","spin","_component_el_checkbox","_component_el_table_column","_component_el_table","_component_FloatingSaveButton","_component_el_checkbox_group","authSettings","user","userPassRules","authCode","onInput","handleUserPassInput","autocomplete","_hasPassword","clearUserPassword","handleClearUserPassword","showUserPassConfirm","confirmNewUserPassword","admin","adminPassRules","adminUsername","clearAdminPassword","adminPassword","handleAdminPassInput","handleClearAdminPassword","showAdminPassConfirm","confirmNewAdminPassword","showCreateTokenDialog","apiTokens","permissions","perm","getPermissionText","formatDate","createdAt","getTokenStatus","expiresAt","expiresText","editToken","deleteToken","tokenLoading","uploadSettings","moderate","moderateContentApiKey","nsfwApiPath","ipQuery","customApi","removeIpQueryParam","addIpQueryParam","responseFields","moveIpQueryResponseField","removeIpQueryResponseField","addIpQueryResponseField","accessSettings","allowedDomains","accessRules","whiteListMode","imageTransformEnabled","imageTransformAllowedSizes","sessionSecure","userSessionMaxAge","adminSessionMaxAge","dialogWidth","createToken","newToken","tokenRules","neverExpire","onCreateNeverExpireChange","expirationValue","expirationUnit","timeUnitOptions","labelKey","autoDelete","showEditTokenDialog","updateToken","editingToken","editTokenRules","onEditNeverExpireChange","showTokenResultDialog","createdToken","append","copyToken","SIMPLE_UNIT_MS","computeExpiresAt","baseTime","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","formatExpiresTime","isoString","getMinutes","getSeconds","expiresDate","formattedTime","FloatingSaveButton","oriUserPassword","oriAdminPassword","owner","validator","rule","urlReservedChars","hasReservedChar","char","validateSessionMaxAge","isInteger","validateImageTransformAllowedSizes","sizes","every","normalizeIpQuerySettings","fields","targetIndex","checked","permission","permissionMap","dateString","loadApiTokens","tokens","tokenForm","hasExpiration","editTokenForm","tokenId","navigator","clipboard","writeText","validationPromises","userPassForm","adminPassForm","accessForm","imageTransformForm","results","isValid","auth","upload","access","_clear","adminPasswordChanged","msg","$store","commit","$router","groupedSettings","categoryGroup","categoryName","setting","announcementManualHeight","localized","localizedOption","currentUploadChannel","currentChannelList","clearable","maxRows","onMousedown","handleAnnouncementResizeStart","refreshAnnouncement","announcementResizeMouseUpHandler","availableChannels","isEn","category","category_en","channelSetting","newVal","oldVal","channelNameSetting","newChannelList","label_en","textarea","closest","resizeHandleSize","isResizeHandle","formItem","startHeight","offsetHeight","resizedHeight","manualHeight","once","fetchAvailableChannels","axios","telemetry","cloudflareApiToken","CF_ZONE_ID","CF_EMAIL","CF_API_KEY","randomImageAPI","allowedDir","publicBrowse","webDAV","uploadChannel","webdavChannelList","channelName","mixins","backgroundManager","newHash","scrollTo","newIndex","hash","DashboardTabs","SysConfigTabs","SysCogStatus","SysCogUpload","SysCogSecurity","SysCogPage","SysCogOthers","$route","fetch","credentials","authType","setDefaultHash","defaultHash","location","initializeBackground","_typeof","iterator","toPropertyKey","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/757.27c783c1.js.map.gz b/frontend-dist/js/757.27c783c1.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..1529994983e90bc4aaeb9c7ae6d159057f0848ba GIT binary patch literal 369621 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

bnZgXdp{5<6r&9skFk&4aX40MkP)|z^HsU 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ßZ8j##hmqWpvLR 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

>KvER=6cMx^!{6S!1OggnCO^UX%R?fn`Jt+^t)_ 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 z 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/799.b7d288ff.js b/frontend-dist/js/799.b7d288ff.js deleted file mode 100644 index 0317986..0000000 --- a/frontend-dist/js/799.b7d288ff.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[799],{213:function(e,t,o){"use strict";o(85331),o(19104)},732:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var a=o(56768),l=o(24232);const i=["href","target"],s=["alt","src"];function n(e,t,o,n,r,d){return(0,a.uX)(),(0,a.CE)("a",{href:d.logoHref,target:o.target,class:(0,l.C4)(e.logo-e.link)},[(0,a.Lk)("img",{class:(0,l.C4)(d.logoClasses),alt:o.alt,src:d.logoUrl},null,10,s)],10,i)}var r=o(60782),d={name:"Logo",props:{href:{type:String,default:"https://github.com/MarSeventh/CloudFlare-ImgBed"},target:{type:String,default:"_blank",validator:e=>["_blank","_self","_parent","_top"].includes(e)},alt:{type:String,default:"Sanyue logo"},customSrc:{type:String,default:""},position:{type:String,default:"fixed",validator:e=>["fixed","relative","absolute","static"].includes(e)},size:{type:String,default:"normal",validator:e=>["small","normal","large"].includes(e)},enableHover:{type:Boolean,default:!0},useConfigLink:{type:Boolean,default:!1}},computed:{...(0,r.L8)(["userConfig"]),logoUrl(){return this.customSrc||this.userConfig?.logoUrl||o(33153)},logoHref(){return this.useConfigLink&&this.userConfig?.logoLink?this.userConfig.logoLink:this.href},logoClasses(){return{logo:!0,[`logo--${this.position}`]:!0,[`logo--${this.size}`]:!0,"logo--hover-enabled":this.enableHover}}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-17f54292"]]);var p=u},2893:function(e,t,o){"use strict";o(85331)},3261:function(e,t,o){"use strict";o(85331)},4885:function(e,t,o){"use strict";o(85331)},10456:function(e,t,o){"use strict";o(85331)},11393:function(e,t,o){o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(a){if(t[a])return t[a].exports;var l=t[a]={i:a,l:!1,exports:{}};return e[a].call(l.exports,l,l.exports,o),l.l=!0,l.exports}return o.m=e,o.c=t,o.d=function(e,t,a){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)o.d(a,l,function(t){return e[t]}.bind(null,l));return a},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var a;function l(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return s}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return f}),o.d(t,"urltoImage",function(){return g}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return v}),o.d(t,"EImageType",function(){return a}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(a||(a={}));var i=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function s(e,t=.92,o=a.JPEG){return i(this,void 0,void 0,function*(){return l(o)||(o=a.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=a.JPEG){return new Promise(a=>e.toBlob(e=>a(e),o,t))}var r=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let a=o[0].match(/:(.*?);/)[1];const i=atob(o[1]);let s=i.length;const n=new Uint8Array(s);for(;s--;)n[s]=i.charCodeAt(s);return l(t)&&(a=t),new Blob([n],{type:a})})}function c(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),a.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const a=document.createEvent("MouseEvents");a.initEvent("click",!1,!1),o.dispatchEvent(a),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),a=document.createElement("canvas"),l=a.getContext("2d");let i,s;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;s=e.width*t,i=e.height*t}else s=o.width||o.height*e.width/e.height||e.width,i=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(a.height=s,a.width=i):(a.height=i,a.width=s),o.orientation){case 3:l.rotate(180*Math.PI/180),l.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 6:l.rotate(90*Math.PI/180),l.drawImage(e,0,-a.width,a.height,a.width);break;case 8:l.rotate(270*Math.PI/180),l.drawImage(e,-a.height,0,a.height,a.width);break;case 2:l.translate(a.width,0),l.scale(-1,1),l.drawImage(e,0,0,a.width,a.height);break;case 4:l.translate(a.width,0),l.scale(-1,1),l.rotate(180*Math.PI/180),l.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 5:l.translate(a.width,0),l.scale(-1,1),l.rotate(90*Math.PI/180),l.drawImage(e,0,-a.width,a.height,a.width);break;case 7:l.translate(a.width,0),l.scale(-1,1),l.rotate(270*Math.PI/180),l.drawImage(e,-a.height,0,a.height,a.width);break;default:l.drawImage(e,0,0,a.width,a.height)}return a})}function f(e){return fetch(e).then(e=>e.blob())}function g(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),a.src=e})}var y=function(e,t,o,a){return new(o||(o=Promise))(function(l,i){function s(e){try{r(a.next(e))}catch(e){i(e)}}function n(e){try{r(a.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(s,n)}r((a=a.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let i=o.split(",")[0].match(/:(.*?);/)[1],n=a.JPEG;l(t.type)&&(n=t.type,i=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield s(u,t.quality,n),f=yield d(h,i);return f.size>e.size?e:f})}function v(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,i=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=a.JPEG;l(t.type)&&(h=t.type,u=t.type);const f=yield c(r),g=yield m(f,Object.assign({},t));let y,b=.5;const v=[null,null];for(let e=1;e<=7;e++){y=yield s(g,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...v].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-i)-Math.abs(.75*t.length-i))[0]);break}if(ot))break;v[0]=y,b+=Math.pow(.5,e+1)}}const k=yield d(y,u);return k.size>e.size?e:k})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33153:function(e,t,o){"use strict";e.exports=o.p+"img/logo.e8dbfa27.png"},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var a=o(99114),l=(o(85331),o(30694),o(49385)),i=(o(37952),o(30650)),s=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},f={class:"node-label"},g={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},v={class:"node-label"};function k(e,t,o,k,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=s.qk,$=i.Vc,S=l.pw,T=a.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:C.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>C.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[C.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",f,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(S,{modelValue:C.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>C.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",g,[C.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",v,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:1},8,["modelValue","title"])],64))])}var C=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await C.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",k],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},34896:function(e,t,o){"use strict";o(85331)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},42550:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var a=o(56768),l=o(45130),i=o(24232);const s={id:"themeMask"},n=["cx","cy","r"],r=["r"],d=["opacity"];function c(e,t,o,c,u,p){const h=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>p.handleToggleClick&&p.handleToggleClick(...e))},[(0,a.bF)(l.eB,{name:"icon-fade",mode:"out-in"},{default:(0,a.k6)(()=>[u.isAuto?((0,a.uX)(),(0,a.Wv)(h,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.5em",color:"var(--theme-toggle-color)"}})):((0,a.uX)(),(0,a.CE)("svg",{key:"sun-moon",class:(0,i.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.5em",height:"1.5em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,a.Lk)("mask",s,[t[1]||(t[1]=(0,a.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,a.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,n)]),(0,a.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMask)"},null,8,r),(0,a.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},[...t[2]||(t[2]=[(0,a.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,a.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,a.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,a.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,a.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,d)],2))]),_:1})])}var u={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},p=o(71241);const h=(0,p.A)(u,[["render",c],["__scopeId","data-v-e9449eac"]]);var m=h},50333:function(e,t,o){"use strict";o(85331),o(29092)},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return l}});var a=o(46638);function l(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:a.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:a.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:a.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:a.Ay.global.t("validation.consecutiveSlashNotAllowed")};const l=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return l.test(e)?{valid:!1,error:a.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return s}});o(44114);var a=o(25507),l=o(16915);let i=!1;async function s(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||i||(i=!0,a.A.commit("setAdminLoggedIn",!1),l.A.push("/adminLogin").finally(()=>{i=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},86975:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var a=o(56768),l=o(24232);const i={key:0,class:"page-footer"},s=["href"];function n(e,t,o,n,r,d){const c=(0,a.g2)("font-awesome-icon");return d.disableFooter?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("div",i,[(0,a.Lk)("p",null,[(0,a.eW)("© 2024-"+(0,l.v_)(d.thisYear)+" Designed by ",1),t[0]||(t[0]=(0,a.Lk)("a",{class:"footer-name",href:"https://github.com/MarSeventh",target:"_blank"},"SanyueQi",-1)),t[1]||(t[1]=(0,a.eW)(" for You! ",-1)),(0,a.Lk)("a",{href:d.footerLink,target:"_blank"},[(0,a.bF)(c,{icon:"paper-plane",class:"footer-link-icon"})],8,s)])]))}var r=o(60782),d={name:"Footer",computed:{...(0,r.L8)(["userConfig"]),footerLink(){return this.userConfig?.footerLink||"https://github.com/MarSeventh"},thisYear(){return(new Date).getFullYear()},disableFooter(){return this.userConfig?.disableFooter||!1}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-08acbaa9"]]);var p=u},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)},97769:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var a=o(56768);const l={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},s={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${o.type}`]}),["telegram"===o.type?((0,a.uX)(),(0,a.CE)("svg",l,[...t[0]||(t[0]=[(0,a.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,a.uX)(),(0,a.CE)("svg",i,[...t[1]||(t[1]=[(0,a.Fv)('',9)])])):"webdav"===o.type?((0,a.uX)(),(0,a.CE)("svg",s,[...t[2]||(t[2]=[(0,a.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,a.uX)(),(0,a.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-ce6ff2ce"]]);var u=c},97799:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return qo}});var a=o(78507),l=(o(85331),o(213),o(80047)),i=(o(99648),o(56768)),s=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},f=["src"],g=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},v={class:"grid-actions"},k={class:"grid-info"},C=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},_=["title"],x=["title"],A={class:"list-meta"},M={class:"upload-time"},R={class:"list-actions"},E={key:0,class:"load-more-container"},D={key:0,class:"loading-indicator"},P={key:1,class:"load-more-hint"},I={key:1,class:"no-more-hint"},N={key:1,class:"empty-state"};function V(e,t,o,V,z,W){const B=(0,i.g2)("font-awesome-icon"),H=l.S2,Q=a.R7;return(0,i.uX)(),(0,i.CE)("div",{class:(0,s.C4)(["history-container",{active:o.show}])},[(0,i.Lk)("div",n,[(0,i.Lk)("div",r,[(0,i.Lk)("h2",null,(0,s.v_)(e.$t("uploadHistory.title")),1),(0,i.Lk)("span",d,(0,s.v_)(e.$t("uploadHistory.totalRecords",{count:z.totalCount})),1)]),(0,i.Lk)("div",c,[(0,i.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",onClick:W.toggleViewMode},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"grid"===z.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",type:"danger",onClick:W.clearHistory},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"times"})]),_:1})])]),z.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>W.handleScroll&&W.handleScroll(...e))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(W.groupedHistory,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.date,class:"history-group"},[(0,i.Lk)("div",u,[t[4]||(t[4]=(0,i.Lk)("div",{class:"timeline-dot"},null,-1)),(0,i.Lk)("span",p,(0,s.v_)(e.date),1)]),"grid"===z.viewMode?((0,i.uX)(),(0,i.CE)("div",h,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"grid-item"},[(0,i.Lk)("div",m,[W.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,f)):W.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,g)):((0,i.uX)(),(0,i.CE)("div",y,[(0,i.bF)(B,{icon:"file",class:"file-icon"})])),(0,i.Lk)("div",b,[(0,i.Lk)("div",v,[(0,i.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,i.Lk)("div",k,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,s.v_)(e.name),9,C),(0,i.Lk)("div",w,(0,s.v_)(W.formatTime(e.time)),1)])]))),128))])):((0,i.uX)(),(0,i.CE)("div",F,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"list-item"},[(0,i.Lk)("div",L,[W.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,U)):W.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,i.uX)(),(0,i.CE)("div",S,[(0,i.bF)(B,{icon:"file"})]))]),(0,i.Lk)("div",T,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,s.v_)(e.name),9,_),(0,i.Lk)("div",{class:"file-url",title:e.url},(0,s.v_)(e.url),9,x)]),(0,i.Lk)("div",A,[(0,i.Lk)("div",M,(0,s.v_)(W.formatTime(e.time)),1)]),(0,i.Lk)("div",R,[(0,i.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),W.hasMore?((0,i.uX)(),(0,i.CE)("div",E,[z.loadingMore?((0,i.uX)(),(0,i.CE)("div",D,[(0,i.bF)(B,{icon:"spinner",spin:""}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadHistory.loading")),1)])):((0,i.uX)(),(0,i.CE)("div",P,(0,s.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):z.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",I,(0,s.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,i.Q3)("",!0)],544)):((0,i.uX)(),(0,i.CE)("div",N,[(0,i.bF)(B,{icon:"history",class:"empty-icon"}),(0,i.Lk)("p",null,(0,s.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var z={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),a=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[a]||(e[a]=[]),e[a].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,a=t.scrollHeight,l=t.clientHeight;a-o-l<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),l=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${a}-${l} ${i}:${s}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},W=o(71241);const B=(0,W.A)(z,[["render",V],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),O=(o(15616),o(81418)),q=(o(50333),o(74757)),j=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(4885),o(97769));o(34396),o(3261);const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},ae={class:"setting-item channel-type-setting"},le={class:"channel-type-toolbar"},ie={class:"setting-label"},se={key:0,class:"channel-empty-state"},ne={key:0,class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"setting-item"},pe={class:"setting-label"},he={class:"dialog-section"},me={class:"section-header"},fe={class:"section-title"},ge={class:"section-content"},ye={class:"dialog-section"},be={class:"section-header"},ve={class:"section-title"},ke={class:"section-content"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={class:"setting-item"},Le={class:"setting-label"},Ue={key:0,class:"setting-item slider-item"},$e={class:"setting-label"},Se={class:"slider-wrapper"},Te={class:"slider-input-wrapper"},_e={key:1,class:"setting-item slider-item"},xe={class:"setting-label"},Ae={class:"slider-wrapper"},Me={class:"slider-input-wrapper"},Re={key:0,class:"dialog-section"},Ee={class:"section-header"},De={class:"section-title"},Pe={class:"section-content"},Ie={class:"setting-item"},Ne={class:"setting-label"},Ve={class:"dialog-action"};function ze(e,t,o,n,r,d){const c=J.Zh,u=J.MQ,p=Y.A,h=J.ll,m=(0,i.g2)("font-awesome-icon"),f=a.R7,g=K.P9,y=K.AV,b=G.WK,v=j.qi,k=q.B8,C=O.lq,w=l.S2,F=X.kZ;return(0,i.uX)(),(0,i.Wv)(F,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[13]||(t[13]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Z,[(0,i.Lk)("div",ee,[(0,i.Lk)("span",te,(0,s.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,i.Lk)("div",oe,[(0,i.Lk)("div",ae,[(0,i.Lk)("div",le,[(0,i.Lk)("span",ie,(0,s.v_)(e.$t("uploadSettings.channelType")),1),(0,i.bF)(u,{modelValue:r.channelVisibility,"onUpdate:modelValue":t[0]||(t[0]=e=>r.channelVisibility=e),size:"small",class:"channel-visibility-filter",onChange:d.handleChannelVisibilityChange},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"all"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.allChannels")),1)]),_:1}),(0,i.bF)(c,{label:"configured"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.configuredChannelsOnly")),1)]),_:1})]),_:1},8,["modelValue","onChange"])]),(0,i.bF)(u,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.visibleChannelOptions,e=>((0,i.uX)(),(0,i.Wv)(h,{key:e.value,label:e.value,class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:e.value,class:"channel-icon"},null,8,["type"]),(0,i.Lk)("span",null,(0,s.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value"]),"configured"===r.channelVisibility&&0===d.visibleChannelOptions.length?((0,i.uX)(),(0,i.CE)("div",se,(0,s.v_)(e.$t("uploadSettings.noConfiguredChannels")),1)):(0,i.Q3)("",!0)]),o.currentChannelList.length>1?((0,i.uX)(),(0,i.CE)("div",ne,[(0,i.Lk)("span",re,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(y,{"model-value":o.channelName,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,i.Q3)("",!0),(0,i.Lk)("div",de,[(0,i.Lk)("span",ce,(0,s.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,i.bF)(b,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,i.Lk)("div",ue,[(0,i.Lk)("span",pe,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(v,{"model-value":o.autoRetry,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,i.Lk)("div",he,[(0,i.Lk)("div",me,[(0,i.Lk)("span",fe,(0,s.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,i.Lk)("div",ge,[(0,i.bF)(u,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:"default",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"cog",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,i.bF)(h,{label:"index",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"hashtag",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,i.bF)(h,{label:"origin",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"file-signature",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,i.bF)(h,{label:"short",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"compress-alt",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,i.Lk)("div",ye,[(0,i.Lk)("div",be,[(0,i.Lk)("span",ve,(0,s.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,i.bF)(f,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",ke,[(0,i.Lk)("div",Ce,[(0,i.Lk)("span",we,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(v,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,i.Lk)("div",Fe,[(0,i.Lk)("span",Le,(0,s.v_)(e.$t("uploadSettings.fileCompress")),1),(0,i.bF)(v,{"model-value":o.customerCompress,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Ue,[(0,i.Lk)("span",$e,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Se,[(0,i.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,i.Lk)("div",Te,[(0,i.bF)(C,{"model-value":o.compressBar,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[14]||(t[14]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",_e,[(0,i.Lk)("span",xe,[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,i.bF)(f,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Ae,[(0,i.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,i.Lk)("div",Me,[(0,i.bF)(C,{"model-value":o.compressQuality,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[15]||(t[15]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,i.uX)(),(0,i.CE)("div",Re,[(0,i.Lk)("div",Ee,[(0,i.Lk)("span",De,(0,s.v_)(e.$t("uploadSettings.serverCompress")),1),(0,i.bF)(f,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(m,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Pe,[(0,i.Lk)("div",Ie,[(0,i.Lk)("span",Ne,(0,s.v_)(e.$t("uploadSettings.enableCompress")),1),(0,i.bF)(v,{"model-value":o.serverCompress,"onUpdate:modelValue":t[11]||(t[11]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Ve,[(0,i.bF)(w,{type:"primary",onClick:t[12]||(t[12]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}const We=[{value:"telegram",label:"TG"},{value:"cfr2",label:"R2"},{value:"s3",label:"S3"},{value:"discord",label:"DC"},{value:"huggingface",label:"HF"},{value:"webdav",label:"WD"}];var Be={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},data(){return{channelVisibility:"configured"}},methods:{hasConfiguredChannels(e){const t=this.availableChannels[e];return Array.isArray(t)&&t.length>0},handleChannelVisibilityChange(e){"configured"===e&&this.ensureConfiguredChannelSelected()},ensureConfiguredChannelSelected(){if("configured"!==this.channelVisibility||this.hasConfiguredChannels(this.uploadChannel))return;const e=this.visibleChannelOptions[0];e&&this.$emit("update:uploadChannel",e.value)},handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},availableChannels:{type:Object,default:()=>({})},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],watch:{availableChannels:{handler(){this.ensureConfiguredChannelSelected()},deep:!0}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},visibleChannelOptions(){return"all"===this.channelVisibility?We:We.filter(e=>this.hasConfiguredChannels(e.value))},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const He=(0,W.A)(Be,[["render",ze],["__scopeId","data-v-25aa00bd"]]);var Qe=He,Xe=o(88559),Oe=(o(85970),o(813)),qe=(o(34896),o(69655)),je=(o(2893),o(74253));o(79899);const Ge={class:"upload-list-item"},Ke=["href"],Je={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ye=["src"],Ze=["src"],et={key:2,style:{width:"10vw","border-radius":"12px"}},tt={class:"upload-list-item-content"},ot={class:"upload-list-item-name-wrapper"},at={key:0,class:"upload-list-item-url"},lt={class:"upload-list-item-url-row"},it={class:"upload-list-item-url-row"},st={key:1,class:"upload-list-item-progress"},nt={class:"upload-list-item-action"};function rt(e,t,o,a,l,n){const r=(0,i.g2)("font-awesome-icon"),d=je.$g,c=G.WK,u=qe.ve,p=(0,i.g2)("Link"),h=Oe.tk,m=(0,i.g2)("Delete");return(0,i.uX)(),(0,i.CE)("div",Ge,[(0,i.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,i.uX)(),(0,i.CE)("video",Je,[(0,i.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ye),t[7]||(t[7]=(0,i.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,i.uX)(),(0,i.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ze)):((0,i.uX)(),(0,i.CE)("div",et,[(0,i.bF)(r,{icon:"file",class:"file-icon"})]))],8,Ke),(0,i.Lk)("div",tt,[(0,i.Lk)("div",ot,[(0,i.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,i.uX)(),(0,i.CE)("div",at,[(0,i.Lk)("div",lt,[(0,i.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[8]||(t[8]=[(0,i.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,i.Lk)("div",it,[(0,i.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[10]||(t[10]=[(0,i.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[11]||(t[11]=[(0,i.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,i.uX)(),(0,i.CE)("div",st,[(0,i.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,i.Lk)("div",nt,[(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(p)]),_:1})]),(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(m)]),_:1})])])])}var dt=o(57477);const ct=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],ut=["mp4","webm","ogg","mkv"];var pt={name:"UploadFileItem",components:{Link:dt.Link,Delete:dt.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return ct.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return ut.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,l;o>0?(a=e.substring(0,o),l=e.substring(o)):(a=e,l="");const i=l.length+4,s=t-i-3;return s<=0?e.substring(0,t-3)+"...":a.substring(0,s)+"..."+a.slice(-4)+l},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ht=(0,W.A)(pt,[["render",rt],["__scopeId","data-v-645a7810"]]);var mt=ht,ft=o(62086),gt=(o(40670),o(88830),o(23597),o(70683)),yt=(o(95385),o(47358)),bt=o(45130);const vt={class:"upload-form"},kt={ref:"clipboardPasteReceiver",class:"clipboard-paste-receiver",tabindex:"-1","aria-hidden":"true"},Ct={class:"upload-card-glow",ref:"uploadCardGlow"},wt={class:"upload-prompt-row"},Ft=["innerHTML"],Lt=["aria-label"],Ut={key:0,class:"upload-card"},$t={class:"paste-card-actions"},St=["aria-label"],Tt=["aria-pressed"],_t=["aria-pressed"],xt={class:"upload-list-container"},At={class:"upload-list-dashboard-action"},Mt={class:"modern-action-group"},Rt={class:"modern-dropdown-item-content"},Et={class:"modern-action-btn modern-action-btn-danger"};function Dt(e,t,n,r,d,c){const u=Oe.tk,p=(0,i.g2)("font-awesome-icon"),h=a.R7,m=yt.j5,f=G.WK,g=l.S2,y=gt.Ik,b=(0,i.g2)("List"),v=(0,i.g2)("Checked"),k=(0,i.g2)("Failed"),C=je.$g,w=j.qi,F=ft.c6,L=ft.Iy,U=ft.dW,$=mt,S=Xe.kA;return(0,i.uX)(),(0,i.CE)("div",vt,[(0,i.Lk)("textarea",kt,null,512),(0,i.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[2]||(t[2]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[3]||(t[3]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e)),onDropCapture:t[4]||(t[4]=(0,bt.D$)((...e)=>c.handleDrop&&c.handleDrop(...e),["stop","prevent"]))},[(0,i.Lk)("div",Ct,null,512),"default"===n.uploadMethod?((0,i.uX)(),(0,i.Wv)(m,{key:0,class:(0,s.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{class:(0,s.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[...t[12]||(t[12]=[(0,i.Lk)("svg",{class:"upload-plus-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.25","stroke-linecap":"round","aria-hidden":"true"},[(0,i.Lk)("path",{d:"M12 7v10"}),(0,i.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,i.Lk)("div",wt,[(0,i.Lk)("div",{class:(0,s.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText",{pasteShortcut:c.pasteShortcut})},null,10,Ft),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.selectFolderUpload"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{type:"button",class:(0,s.C4)(["folder-upload-icon-button",{"upload-list-busy":d.fileList.length}]),"aria-label":e.$t("upload.selectFolderUpload"),onClick:t[0]||(t[0]=(0,bt.D$)((...e)=>c.openFolderPicker&&c.openFolderPicker(...e),["stop","prevent"]))},[(0,i.bF)(p,{icon:"folder-open"})],10,Lt)]),_:1},8,["disabled","content"])])]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,i.Q3)("",!0),(0,i.Lk)("input",{ref:"folderInput",class:"folder-upload-input",type:"file",webkitdirectory:"",directory:"",multiple:"",onChange:t[1]||(t[1]=(...e)=>c.handleFolderSelection&&c.handleFolderSelection(...e))},null,544)],32),"paste"===n.uploadMethod?((0,i.uX)(),(0,i.CE)("div",Ut,[(0,i.bF)(y,{class:(0,s.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[5]||(t[5]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,i.Lk)("div",$t,[(0,i.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,i.Lk)("div",{class:(0,s.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,i.Lk)("button",{class:(0,s.C4)(["paste-card-method-button",{"is-active":"save"===d.pasteUploadMethod}]),type:"button","aria-pressed":"save"===d.pasteUploadMethod,onClick:t[6]||(t[6]=e=>d.pasteUploadMethod="save")},(0,s.v_)(e.$t("upload.pasteSave")),11,Tt),(0,i.Lk)("button",{class:(0,s.C4)(["paste-card-method-button",{"is-active":"external"===d.pasteUploadMethod}]),type:"button","aria-pressed":"external"===d.pasteUploadMethod,onClick:t[7]||(t[7]=e=>d.pasteUploadMethod="external")},(0,s.v_)(e.$t("upload.pasteExternal")),11,_t)],10,St)])]),_:1},8,["class"])])):(0,i.Q3)("",!0),(0,i.bF)(y,{class:(0,s.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.Lk)("div",xt,[(0,i.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",{class:(0,s.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,i.bF)(C,{class:"upload-list-dashboard-title"},{default:(0,i.k6)(()=>[(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(b)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(v)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadSuccessCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(k)]),_:1}),(0,i.eW)((0,s.v_)(c.uploadErrorCount),1)]),_:1}),(0,i.Lk)("div",At,[(0,i.Lk)("div",Mt,[(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[8]||(t[8]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,i.bF)(p,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",Rt,[(0,i.Lk)("span",null,(0,s.v_)(e.$t("uploadForm.autoRetry")),1),(0,i.bF)(w,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[10]||(t[10]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[9]||(t[9]=(...e)=>c.retryError&&c.retryError(...e))},[(0,i.bF)(p,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,{onClick:c.clearFileList},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,i.bF)(F,{onClick:c.clearSuccessList},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",Et,[(0,i.bF)(p,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.fileList.slice().reverse(),e=>((0,i.uX)(),(0,i.Wv)($,{key:e.uid,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[11]||(t[11]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])])]),_:1},8,["class"])])}o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979);var Pt=o(457),It=o(76334),Nt=o(60782);function Vt(e,t,o){const a=o+e;return{finalURL:a,mdURL:`![${t}](${a})`,htmlURL:`${t}`,ubbURL:`[img]${a}[/img]`}}function zt(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function Wt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=Vt(e.srcID,e.name,t);Object.assign(e,o)})}const Bt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ht=(e,t)=>e>>>t|e<<32-t;function Qt(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=Ht(o[u-15],7)^Ht(o[u-15],18)^o[u-15]>>>3,t=Ht(o[u-2],17)^Ht(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[a,l,i,s,n,r,d,c]=t;for(let u=0;u<64;u++){const e=Ht(n,6)^Ht(n,11)^Ht(n,25),t=n&r^~n&d,p=c+e+t+Bt[u]+o[u]>>>0,h=Ht(a,2)^Ht(a,13)^Ht(a,22),m=a&l^a&i^l&i,f=h+m>>>0;c=d,d=r,r=n,n=s+p>>>0,s=i,i=l,l=a,a=p+f>>>0}t[0]=t[0]+a>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+i>>>0,t[3]=t[3]+s>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Xt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,a=0;return{update(l){a+=l.length;let i=0;if(o>0){const a=64-o,s=Math.min(a,l.length);t.set(l.subarray(0,s),o),o+=s,i=s,64===o&&(Qt(t,e),o=0)}while(i+64<=l.length)Qt(l.subarray(i,i+64),e),i+=64;i56&&(t.fill(0,o,64),Qt(t,e),o=0),t.fill(0,o,56);const i=new DataView(t.buffer);i.setUint32(56,Math.floor(l/4294967296),!1),i.setUint32(60,l>>>0,!1),Qt(t,e);let s="";for(let t=0;t<8;t++)s+=e[t].toString(16).padStart(8,"0");return s}}}async function Ot(e){const t=Xt(),o=4194304;let a=0;while(ae&&"."!==e).map(e=>".."===e?"_":e).join("/")}function jt(e=""){const t=qt(e),o=t.lastIndexOf("/");return-1===o?"":t.slice(0,o)}function Gt(e="",t=""){const o=/^[\\/]/.test(String(e).trim()),a=[qt(e),qt(t)].filter(Boolean).join("/");return a?o?`/${a}`:a:""}function Kt(e=[]){return Array.from(e).map(e=>({file:e,relativePath:qt(e.webkitRelativePath||e.relativePath||e.name)}))}function Jt(e){return new Promise((t,o)=>e.file(t,o))}async function Yt(e){const t=e.createReader(),o=[];while(1){const e=await new Promise((e,o)=>t.readEntries(e,o));if(!e.length)break;o.push(...e)}return o}async function Zt(e,t,o){const a=qt([t,e.name].filter(Boolean).join("/"));if(e.isFile){const t=await Jt(e);return void o.push({file:t,relativePath:a})}if(e.isDirectory){const t=await Yt(e);for(const e of t)await Zt(e,a,o)}}async function eo(e,t,o){const a=qt([t,e.name].filter(Boolean).join("/"));if("file"!==e.kind){if("directory"===e.kind)for await(const l of e.values())await eo(l,a,o)}else o.push({file:await e.getFile(),relativePath:a})}async function to(e=[]){const t=Array.from(e).filter(e=>"file"===e.kind),o=[],a=await Promise.all(t.map(async e=>{if("function"!==typeof e.getAsFileSystemHandle)return null;try{return await e.getAsFileSystemHandle()}catch{return null}}));for(let l=0;lthis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){Wt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&Wt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Nt.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},pasteShortcut(){const e=navigator.userAgentData?.platform||navigator.platform||"";return/mac|iphone|ipad|ipod/i.test(e)?"Cmd + V":"Ctrl + V"},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),document.addEventListener("keydown",this.handlePasteShortcut),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),document.removeEventListener("keydown",this.handlePasteShortcut),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{createLocalUid(){return this.localUidCounter+=1,`local-${Date.now()}-${this.localUidCounter}`},applyUploadPath(e,t=e.name){const o=String(t||e.name).replace(/\\/g,"/").replace(/^\/+/,"");return e.uploadRelativePath=o,e.uploadFolder=Gt(this.uploadFolder,jt(o)),e},copyUploadPath(e,t){return t.uploadRelativePath=e.uploadRelativePath||e.name,t.uploadFolder=e.uploadFolder??this.uploadFolder,t},getFileUploadFolder(e){const t=this.fileList.find(t=>t.uid===e.file.uid);return t?.uploadFolder??e.file.uploadFolder??this.uploadFolder},createUploadRequest(e){return{file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)}},async uploadLocalEntries(e){await Promise.allSettled(e.map(async({file:e,relativePath:t})=>{e.uid=this.createLocalUid(),this.applyUploadPath(e,t);const o=await this.beforeUpload(e);o instanceof File&&this.uploadFile(this.createUploadRequest(o))}))},openFolderPicker(){this.$refs.folderInput?.click()},async handleFolderSelection(e){const t=Kt(e.target.files);e.target.value="",await this.uploadLocalEntries(t)},async handleDrop(e){const t=e.dataTransfer;if(!t)return;const o=t.items?.length?await to(t.items):Kt(t.files);o.length&&await this.uploadLocalEntries(o)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,l;o>0?(a=e.substring(0,o),l=e.substring(o)):(a=e,l="");const i=l.length+4,s=t-i-3;return s<=0?e.substring(0,t-3)+"...":a.substring(0,s)+"..."+a.slice(-4)+l},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),a=o?.uploadChannel||this.uploadChannel;if("external"===a)return void this.uploadSingleFile(e);if("huggingface"===a){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===a){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const l=20971520;e.file.size>l?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,a=t.uploadChannel||this.uploadChannel,l=this.autoRetry&&"external"!==a,i="external"===a?"default":this.uploadNameType,s=this.getFileUploadFolder(e),n=new AbortController;this.abortControllers.set(e.file.uid,n);const r=new FormData;if(r.append("file",e.file),"external"===a&&r.append("url",e.file.url),"huggingface"===a)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await Ot(e.file);r.append("sha256",t),console.log("SHA256 computed:",t)}catch(d){console.error("Failed to compute SHA256:",d)}(0,Pt.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+a+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+i+"&autoRetry="+l+"&uploadFolder="+encodeURIComponent(s),method:"post",data:r,withAuthCode:!0,signal:n.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,a=new AbortController;this.abortControllers.set(e.file.uid,a);const l="discord"===o?9437184:16777216,i=e.file.size,s=e.file.type||"application/octet-stream",n=Math.ceil(i/l),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType,u=this.getFileUploadFolder(e);let p=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),p=await Ot(e.file),console.log("SHA256 computed:",p)}catch(h){console.error("Failed to compute SHA256:",h)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",s),t.append("totalChunks",n.toString());const m=await(0,Pt.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(u)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!m.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+m.data.message);const f=m.data.uploadId;console.log("分块上传初始化成功,uploadId:",f);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=f);const y=3,b=new Array(n).fill(0);let v=0,k=!1,C="",w=!1;const F=async t=>{if(k||w)return;const p=t*l,m=Math.min(p+l,i),g=e.file.slice(p,m),y=new FormData;y.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),y.append("chunkIndex",t.toString()),y.append("totalChunks",n.toString()),y.append("uploadId",f),y.append("originalFileName",e.file.name),y.append("originalFileType",s);let v=0;const F=3;while(v{if(k||w)return;const a=Math.round(o.loaded/o.total*100);b[t]=a;const l=Math.round(b.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:l,file:e.file})}})}catch(h){if("CanceledError"===h.name||"ERR_CANCELED"===h.code)return w=!0,void console.log("分块上传已取消:",e.file.name);if(v++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${v}/${F}):`,h),v>=F)throw k=!0,C=`分块 ${t+1}/${n} 上传失败: ${h.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*v))}}},L=[];for(let e=0;e{while(vt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),h.response&&401!==h.response.status?(this.exceptionList.push(e),e.onError(h,e.file)):h.response||(this.exceptionList.push(e),e.onError(h,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,Pt.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const a=o.uploadChannel||this.uploadChannel;if("external"!==a){const a=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+a;const l=Vt(a,t.name,this.rootUrl);Object.assign(o,l),o.srcID=a}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(a){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(zt(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let a=e;const l=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(l)try{const t=await this.convertImageToWebp(e);t&&(a=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const i=a.type.includes("image")&&this.customerCompress&&a.size/1024/1024>this.compressBar,s=a.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const a=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.uploadRelativePath||e.name,url:a,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,uploadFolder:e.uploadFolder??this.uploadFolder,retryCount:0}),t(e)};if(i)It.compressAccurately(a,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const l=new File([t],a.name,{type:t.type});l.uid=e.uid,this.copyUploadPath(a,l);const i=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;n(l,i)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:a.name})),o(e)});else if(s){this.uploading=!0;const e="telegram"===this.uploadChannel&&this.serverCompress&&(!a.type.includes("image")||a.size/1024/1024<10);n(a,e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>zt(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},isEditablePasteTarget(e){const t=e?.nodeType===Node.TEXT_NODE?e.parentElement:e;if(!t)return!1;const o=t.tagName;return"INPUT"===o||"TEXTAREA"===o||t.isContentEditable||Boolean(t.closest?.('[contenteditable="true"]'))},handlePasteShortcut(e){const t=(e.ctrlKey||e.metaKey)&&!e.altKey&&"v"===String(e.key).toLowerCase();if(!t||this.isEditablePasteTarget(e.target))return;const o=this.$refs.clipboardPasteReceiver;if(o){this.pasteFocusTarget=document.activeElement,o.value="";try{o.focus({preventScroll:!0})}catch{o.focus()}}},releasePasteReceiver(e){const t=this.$refs.clipboardPasteReceiver;if(!t||e!==t)return;t.value="";const o=this.pasteFocusTarget;this.pasteFocusTarget=null,setTimeout(()=>{if(o?.isConnected&&"function"===typeof o.focus)try{o.focus({preventScroll:!0})}catch{o.focus()}else t.blur();document.activeElement===t&&t.blur()},0)},async handlePaste(e){const t=e.target===this.$refs.clipboardPasteReceiver;if(!t&&this.isEditablePasteTarget(e.target))return;const o=e.clipboardData;if(!o)return void this.releasePasteReceiver(e.target);const a=Array.from(o.items||[]),l=a.filter(e=>"file"===e.kind),i=a.filter(e=>"string"===e.kind),s=Kt(o.files||[]);if(t&&e.preventDefault(),this.releasePasteReceiver(e.target),s.length>0||l.length>0){e.preventDefault();let t=[];if(l.length)try{t=await to(l)}catch(n){console.warn("Failed to parse clipboard items, falling back to clipboard files:",n)}t.length||(t=s),t.length&&await this.uploadLocalEntries(t)}i.length>0&&this.uploadFromUrl(i)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,s=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:l,htmlURL:i,ubbURL:s,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let a="";o.test(e)&&Pt.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const i=o.headers["content-disposition"];if(i){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(i);if(null!=o&&o[1]){a=o[1].replace(/['"]/g,"");try{a=decodeURIComponent(a)}catch(l){a=""}}""===a&&(o=t.exec(i),null!=o&&o[1]&&(a=decodeURIComponent(o[1])))}if(""===a){const t=new URL(e);a=t.pathname.split("/").pop()}if(""===a){const o=new URL(e);let l=o.pathname.split(".").pop();(!l||""===l||l.length>10)&&(l="bin"),a="PastedFile"+Date.now()+t+"."+l}const s=o.data,n=new File([s],a,{type:s.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);const a=this.getFileUploadFolder(e);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await Ot(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const l=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),i=btoa(String.fromCharCode(...l));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const s=await(0,Pt.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:i,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:a},withAuthCode:!0,signal:o.signal});if(!s.data.success)throw new Error(s.data.error||"Failed to get upload URL");const n=s.data;if(console.log("Upload info:",n),n.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(n.needsLfs&&n.uploadAction){const{href:t,header:a}=n.uploadAction;if(a?.chunk_size)await this.uploadToHuggingFaceMultipart(e,n,o);else{console.log("Uploading to S3 (basic)...");const l=await fetch(t,{method:"PUT",headers:a||{},body:e.file,signal:o.signal});if(!l.ok){const e=await l.text();throw new Error(`S3 upload failed: ${l.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const r=await(0,Pt.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:n.fullId,filePath:n.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:n.channelName},withAuthCode:!0,signal:o.signal});if(!r.data.success)throw new Error(r.data.error||"Failed to commit file");console.log("Upload complete:",r.data);const d={data:[{src:r.data.src}]};e.onSuccess(d,e.file)}catch(l){if("CanceledError"===l.name||"ERR_CANCELED"===l.code||"AbortError"===l.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",l),this.exceptionList.push(e),e.onError(l,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:a}=t,{href:l,header:i}=a,s=parseInt(i.chunk_size),n=Object.keys(i).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${s}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,a=t*s,l=Math.min(a+s,e.file.size),n=e.file.slice(a,l);console.log(`Uploading part ${u}/${d}`);const c=await fetch(i[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(l,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const a=new Image,l=document.createElement("canvas"),i=l.getContext("2d");a.onload=()=>{l.width=a.width,l.height=a.height,i.drawImage(a,0,0),l.toBlob(l=>{if(l){const o=e.name,a=o.lastIndexOf("."),i=a>0?o.substring(0,a)+".webp":o+".webp",s=new File([l],i,{type:"image/webp"});s.uid=e.uid,this.copyUploadPath(e,s),t(s)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(a.src)},"image/webp",.92)},a.onerror=()=>{URL.revokeObjectURL(a.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},a.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),a=e.clientX-o.left,l=e.clientY-o.top;t.style.opacity="1",t.style.left=a+"px",t.style.top=l+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const ao=(0,W.A)(oo,[["render",Dt],["__scopeId","data-v-a42a2866"]]);var lo=ao,io=o(732),so=o(33892);const no={class:"directory-suggestion-input",ref:"wrapperRef"},ro={class:"suggestion-dropdown"},co={class:"suggestion-list"},uo=["title","onMousedown"];function po(e,t,o,a,l,n){const r=G.WK;return(0,i.uX)(),(0,i.CE)("div",no,[(0,i.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,i.bo)((0,i.Lk)("div",ro,[(0,i.Lk)("ul",co,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.suggestions,(e,t)=>((0,i.uX)(),(0,i.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,bt.D$)(t=>n.selectItem(e),["prevent"])},(0,s.v_)(e.value),41,uo))),128))])],512),[[bt.aG,l.dropdownVisible&&l.suggestions.length>0]])],512)}var ho={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),a=this.directoryChildrenMap[o];a&&a.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const a=this.normalizeDirectoryPath(e.path),l=Array.isArray(e.children)?e.children:[];t[a]=l.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),l.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await Pt.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),a=o.split("/"),l=a[a.length-1]||"",i=a.slice(0,-1).filter(Boolean),s=i.length>0?`/${i.join("/")}/`:"/";return{segmentInput:l,parentPath:s}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),a=this.directoryChildrenMap[o]||[];if(!t)return a.slice(0,10).map(e=>({value:e.path}));const l=t.toLowerCase();return a.filter(e=>e.name.toLowerCase().startsWith(l)).slice(0,10).map(e=>({value:e.path}))}}};const mo=(0,W.A)(ho,[["render",po],["__scopeId","data-v-28b8eda7"]]);var fo=mo,go=o(42550);const yo={class:"container"},bo={class:"upload-home"},vo={class:"quick-toolbar-actions"},ko={class:"quick-toolbar-actions-inner"},Co={class:"header"},wo={class:"title"},Fo={class:"title-crayon-text","aria-hidden":"true"},Lo={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},Uo={class:"dialog-section"},$o={class:"section-header"},So={class:"section-title"},To={class:"section-content"},_o={class:"dialog-section"},xo={class:"section-header"},Ao={class:"section-title"},Mo={class:"section-content"},Ro={class:"setting-item"},Eo={class:"setting-label"},Do={key:0,class:"setting-item"},Po={class:"setting-label"},Io={class:"dialog-action"},No=["innerHTML"],Vo={class:"dialog-footer"};function zo(e,t,o,n,r,d){const c=go.A,u=(0,i.g2)("font-awesome-icon"),p=l.S2,h=ft.c6,m=ft.Iy,f=ft.dW,g=fo,y=G.WK,b=so.A,v=a.R7,k=io.A,C=lo,w=J.ll,F=J.MQ,L=j.qi,U=X.kZ,$=Qe,S=Q.A,T=H;return(0,i.uX)(),(0,i.CE)("div",yo,[(0,i.Lk)("div",bo,[(0,i.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,i.bF)(f,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,s.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,i.Lk)("div",{class:(0,s.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(g,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,i.uX)(),(0,i.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,i.k6)(()=>[(0,i.bF)(p,{class:"directory-tree-trigger"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,i.Q3)("",!0)],2),(0,i.bF)(v,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,i.k6)(()=>["default"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,i.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,i.bF)(f,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"toggleTheme"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,s.v_)(d.getThemeText()),1)]),_:1}),(0,i.bF)(h,{command:"toggleUploadMethod"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,s.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,s.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"mobile-more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,s.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,i.Lk)("div",vo,[(0,i.Lk)("div",ko,[(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(v,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,i.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,i.bF)(p,{class:(0,s.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,i.bF)(k,{useConfigLink:!0}),(0,i.Lk)("div",Co,[(0,i.Lk)("h1",wo,[(0,i.Lk)("span",Fo,(0,s.v_)(d.ownerName)+" ImgHub",1),(0,i.Lk)("a",Lo,(0,s.v_)(d.ownerName),1),t[24]||(t[24]=(0,i.eW)(" ImgHub ",-1))])]),(0,i.bF)(C,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,i.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[10]||(t[10]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Uo,[(0,i.Lk)("div",$o,[(0,i.Lk)("span",So,(0,s.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,i.Lk)("div",To,[(0,i.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[6]||(t[6]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(w,{value:"url",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"radio-icon"}),(0,i.Lk)("span",null,(0,s.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,i.bF)(w,{value:"md",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,i.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,i.bF)(w,{value:"html",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,i.Lk)("span",null,"HTML",-1))]),_:1}),(0,i.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,i.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,i.Lk)("div",_o,[(0,i.Lk)("div",xo,[(0,i.Lk)("span",Ao,(0,s.v_)(e.$t("settings.customLink")),1),(0,i.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Mo,[(0,i.Lk)("div",Ro,[(0,i.Lk)("span",Eo,(0,s.v_)(e.$t("settings.enableCustom")),1),(0,i.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,i.uX)(),(0,i.CE)("div",Do,[(0,i.Lk)("span",Po,(0,s.v_)(e.$t("settings.customPrefix")),1),(0,i.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[8]||(t[8]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,i.Q3)("",!0)])]),(0,i.Lk)("div",Io,[(0,i.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,i.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[11]||(t[11]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[12]||(t[12]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[13]||(t[13]=e=>r.channelName=e),availableChannels:r.availableChannels,currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[14]||(t[14]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[15]||(t[15]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[16]||(t[16]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[17]||(t[17]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[18]||(t[18]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[19]||(t[19]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[20]||(t[20]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[21]||(t[21]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","availableChannels","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,i.bF)(S,{class:"footer"}),(0,i.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Vo,[(0,i.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,i.k6)(()=>[(0,i.eW)((0,s.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",{innerHTML:r.announcementContent},null,8,No)]),_:1},8,["title","modelValue","width"]),(0,i.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var Wo=o(46638),Bo=o(48903),Ho=o(90144),Qo=o(62388),Xo={name:"UploadHome",mixins:[Bo.A],data(){return{selectedUrlForm:(0,Ho.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,isQuickToolbarOpen:!1,isQuickToolbarPinned:!1,showAnnouncementDialog:!1,announcementContent:"",displayedAnnouncementRefreshAt:null,showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,Qo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Nt.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!0,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto",this.showAnnouncementIfNeeded()},components:{UploadForm:lo,Footer:Q.A,ToggleDark:go.A,Logo:io.A,UploadHistory:H,UploadSettingsDialog:Qe,DirectoryTreePicker:so.A,DirectorySuggestionInput:fo},methods:{async fetchAvailableChannels(){try{const e=await Pt.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,a=this.availableChannels[this.uploadChannel]||[];t&&a.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&a.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,Qo.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){Pt.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleQuickToolbarMoreEnter(){this.isQuickToolbarOpen=!0},handleQuickToolbarLeave(){this.isQuickToolbarPinned||(this.isQuickToolbarOpen=!1)},toggleQuickToolbar(){this.isQuickToolbarPinned=!this.isQuickToolbarPinned,this.isQuickToolbarOpen=this.isQuickToolbarPinned},closeQuickToolbar(){this.isQuickToolbarPinned=!1,this.isQuickToolbarOpen=!1},handleQuickToolbarCommand(e){this.closeQuickToolbar(),"linkFormat"===e?this.openUrlDialog():"manage"===e?this.handleManage():"logout"===e&&this.handleLogout()},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,Wo.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,Wo.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?this.openAnnouncement(e):this.$message.info(this.$t("upload.noAnnouncement"))},getAnnouncementRefreshAt(){const e=Number(this.userConfig?.announcementRefreshAt);return Number.isFinite(e)&&e>0?e:null},openAnnouncement(e){this.announcementContent=e,this.displayedAnnouncementRefreshAt=this.getAnnouncementRefreshAt(),this.showAnnouncementDialog=!0},showAnnouncementIfNeeded(){const e=this.userConfig?.announcement;if(!e)return;const t=this.getAnnouncementRefreshAt();if(t){const o=Number(localStorage.getItem("announcementAcknowledgedRefreshAt"));return void((!Number.isFinite(o)||t>o)&&this.openAnnouncement(e))}localStorage.getItem("announcementAcknowledgedAt")||this.openAnnouncement(e)},acknowledgeAnnouncement(){localStorage.setItem("announcementAcknowledgedAt",String(Date.now())),this.displayedAnnouncementRefreshAt&&localStorage.setItem("announcementAcknowledgedRefreshAt",String(this.displayedAnnouncementRefreshAt)),this.showAnnouncementDialog=!1},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const Oo=(0,W.A)(Xo,[["render",zo],["__scopeId","data-v-15adb2dc"]]);var qo=Oo}}]); -//# sourceMappingURL=799.b7d288ff.js.map \ No newline at end of file diff --git a/frontend-dist/js/799.b7d288ff.js.gz b/frontend-dist/js/799.b7d288ff.js.gz deleted file mode 100644 index e11f98e0ef6f041b0e01854a8bd8fbf682ddbb53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33774 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 ['_blank', '_self', '_parent', '_top'].includes(value)\n },\n // 图片alt文本\n alt: {\n type: String,\n default: 'Sanyue logo'\n },\n // 自定义logo图片URL(可选)\n customSrc: {\n type: String,\n default: ''\n },\n // Logo位置样式\n position: {\n type: String,\n default: 'fixed',\n // fixed, relative, absolute\n validator: value => ['fixed', 'relative', 'absolute', 'static'].includes(value)\n },\n // Logo大小\n size: {\n type: String,\n default: 'normal',\n // small, normal, large\n validator: value => ['small', 'normal', 'large'].includes(value)\n },\n // 是否启用悬停动画\n enableHover: {\n type: Boolean,\n default: true\n },\n // 是否允许使用用户配置的链接(仅上传页面启用)\n useConfigLink: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n ...mapGetters(['userConfig']),\n logoUrl() {\n // 优先级:customSrc > 用户配置 > 默认图片\n return this.customSrc || this.userConfig?.logoUrl || require('../assets/logo.png');\n },\n logoHref() {\n // 只有启用 useConfigLink 时才使用用户配置的链接\n if (this.useConfigLink && this.userConfig?.logoLink) {\n return this.userConfig.logoLink;\n }\n return this.href;\n },\n logoClasses() {\n return {\n 'logo': true,\n [`logo--${this.position}`]: true,\n [`logo--${this.size}`]: true,\n 'logo--hover-enabled': this.enableHover\n };\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Logo.vue?vue&type=template&id=17f54292&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\n\nimport \"./Logo.vue?vue&type=style&index=0&id=17f54292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-17f54292\"]])\n\nexport default __exports__","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMask\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.5em\",\n height: \"1.5em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMask)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.5em\",\n \"color\": \"var(--theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ToggleDark.vue?vue&type=template&id=e9449eac&scoped=true\"\nimport script from \"./ToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleDark.vue?vue&type=style&index=0&id=e9449eac&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e9449eac\"]])\n\nexport default __exports__","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\nimport i18n from '@/locales'\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path, { strict = true } = {}) {\r\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\r\n if (!path || path.trim() === '') {\r\n return { valid: true };\r\n }\r\n \r\n // 如果路径仅为 \"/\",返回有效(表示根目录)\r\n if (path === '/') {\r\n return { valid: true };\r\n }\r\n \r\n // 检查路径是否以 \"/\" 开头\r\n if (!path.startsWith('/')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.pathMustStartWithSlash') \r\n };\r\n }\r\n\r\n // 检查路径穿越:包含 .. 的路径段\r\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.pathTraversalNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径中单独的 . 段\r\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\r\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\r\n if (dotPattern.test(path)) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.singleDotNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \r\n };\r\n }\r\n \r\n // 检查路径是否包含非法字符\r\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"page-footer\"\n};\nconst _hoisted_2 = [\"href\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return !$options.disableFooter ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"p\", null, [_createTextVNode(\"© 2024-\" + _toDisplayString($options.thisYear) + \" Designed by \", 1), _cache[0] || (_cache[0] = _createElementVNode(\"a\", {\n class: \"footer-name\",\n href: \"https://github.com/MarSeventh\",\n target: \"_blank\"\n }, \"SanyueQi\", -1)), _cache[1] || (_cache[1] = _createTextVNode(\" for You! \", -1)), _createElementVNode(\"a\", {\n href: $options.footerLink,\n target: \"_blank\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"footer-link-icon\"\n })], 8, _hoisted_2)])])) : _createCommentVNode(\"\", true);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Footer',\n computed: {\n ...mapGetters(['userConfig']),\n footerLink() {\n return this.userConfig?.footerLink || 'https://github.com/MarSeventh';\n },\n thisYear() {\n return new Date().getFullYear();\n },\n disableFooter() {\n return this.userConfig?.disableFooter || false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Footer.vue?vue&type=template&id=08acbaa9&scoped=true\"\nimport script from \"./Footer.vue?vue&type=script&lang=js\"\nexport * from \"./Footer.vue?vue&type=script&lang=js\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=08acbaa9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08acbaa9\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=7da2f8c2&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=7da2f8c2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7da2f8c2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item channel-type-setting\"\n};\nconst _hoisted_6 = {\n class: \"channel-type-toolbar\"\n};\nconst _hoisted_7 = {\n class: \"setting-label\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"channel-empty-state\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"setting-item\"\n};\nconst _hoisted_14 = {\n class: \"setting-label\"\n};\nconst _hoisted_15 = {\n class: \"dialog-section\"\n};\nconst _hoisted_16 = {\n class: \"section-header\"\n};\nconst _hoisted_17 = {\n class: \"section-title\"\n};\nconst _hoisted_18 = {\n class: \"section-content\"\n};\nconst _hoisted_19 = {\n class: \"dialog-section\"\n};\nconst _hoisted_20 = {\n class: \"section-header\"\n};\nconst _hoisted_21 = {\n class: \"section-title\"\n};\nconst _hoisted_22 = {\n class: \"section-content\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n class: \"setting-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_28 = {\n class: \"setting-label\"\n};\nconst _hoisted_29 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_30 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_32 = {\n class: \"setting-label\"\n};\nconst _hoisted_33 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_34 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_35 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_36 = {\n class: \"section-header\"\n};\nconst _hoisted_37 = {\n class: \"section-title\"\n};\nconst _hoisted_38 = {\n class: \"section-content\"\n};\nconst _hoisted_39 = {\n class: \"setting-item\"\n};\nconst _hoisted_40 = {\n class: \"setting-label\"\n};\nconst _hoisted_41 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope upload-settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n modelValue: $data.channelVisibility,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelVisibility = $event),\n size: \"small\",\n class: \"channel-visibility-filter\",\n onChange: $options.handleChannelVisibilityChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"all\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.allChannels')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"configured\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.configuredChannelsOnly')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])]), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.visibleChannelOptions, channel => {\n return _openBlock(), _createBlock(_component_el_radio, {\n key: channel.value,\n label: channel.value,\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: channel.value,\n class: \"channel-icon\"\n }, null, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString(channel.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\"]), $data.channelVisibility === 'configured' && $options.visibleChannelOptions.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('uploadSettings.noConfiguredChannels')), 1)) : _createCommentVNode(\"\", true)]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [_createElementVNode(\"span\", _hoisted_28, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_29, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[14] || (_cache[14] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [_createElementVNode(\"span\", _hoisted_32, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[15] || (_cache[15] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [_createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"span\", _hoisted_37, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_38, [_createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"span\", _hoisted_40, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_41, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[12] || (_cache[12] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nconst CHANNEL_OPTIONS = [{\n value: 'telegram',\n label: 'TG'\n}, {\n value: 'cfr2',\n label: 'R2'\n}, {\n value: 's3',\n label: 'S3'\n}, {\n value: 'discord',\n label: 'DC'\n}, {\n value: 'huggingface',\n label: 'HF'\n}, {\n value: 'webdav',\n label: 'WD'\n}];\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n data() {\n return {\n channelVisibility: 'configured'\n };\n },\n methods: {\n hasConfiguredChannels(channelType) {\n const channels = this.availableChannels[channelType];\n return Array.isArray(channels) && channels.length > 0;\n },\n handleChannelVisibilityChange(visibility) {\n if (visibility !== 'configured') {\n return;\n }\n this.ensureConfiguredChannelSelected();\n },\n ensureConfiguredChannelSelected() {\n if (this.channelVisibility !== 'configured' || this.hasConfiguredChannels(this.uploadChannel)) {\n return;\n }\n const firstConfiguredChannel = this.visibleChannelOptions[0];\n if (firstConfiguredChannel) {\n this.$emit('update:uploadChannel', firstConfiguredChannel.value);\n }\n },\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n availableChannels: {\n type: Object,\n default: () => ({})\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n watch: {\n availableChannels: {\n handler() {\n this.ensureConfiguredChannelSelected();\n },\n deep: true\n }\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n visibleChannelOptions() {\n if (this.channelVisibility === 'all') {\n return CHANNEL_OPTIONS;\n }\n return CHANNEL_OPTIONS.filter(channel => this.hasConfiguredChannels(channel.value));\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=25aa00bd&scoped=true\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"./UploadSettingsDialog.vue?vue&type=style&index=1&id=25aa00bd&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25aa00bd\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=645a7810&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=645a7810&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-645a7810\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, withModifiers as _withModifiers, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n ref: \"clipboardPasteReceiver\",\n class: \"clipboard-paste-receiver\",\n tabindex: \"-1\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_3 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_4 = {\n class: \"upload-prompt-row\"\n};\nconst _hoisted_5 = [\"innerHTML\"];\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_8 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_9 = [\"aria-label\"];\nconst _hoisted_10 = [\"aria-pressed\"];\nconst _hoisted_11 = [\"aria-pressed\"];\nconst _hoisted_12 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_14 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_15 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_16 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"textarea\", _hoisted_2, null, 512), _createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[2] || (_cache[2] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[3] || (_cache[3] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args)),\n onDropCapture: _cache[4] || (_cache[4] = _withModifiers((...args) => $options.handleDrop && $options.handleDrop(...args), [\"stop\", \"prevent\"]))\n }, [_createElementVNode(\"div\", _hoisted_3, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [...(_cache[12] || (_cache[12] = [_createElementVNode(\"svg\", {\n class: \"upload-plus-icon\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"1.25\",\n \"stroke-linecap\": \"round\",\n \"aria-hidden\": \"true\"\n }, [_createElementVNode(\"path\", {\n d: \"M12 7v10\"\n }), _createElementVNode(\"path\", {\n d: \"M7 12h10\"\n })], -1)]))]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText', {\n pasteShortcut: $options.pasteShortcut\n })\n }, null, 10, _hoisted_5), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.selectFolderUpload'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n type: \"button\",\n class: _normalizeClass([\"folder-upload-icon-button\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n \"aria-label\": _ctx.$t('upload.selectFolderUpload'),\n onClick: _cache[0] || (_cache[0] = _withModifiers((...args) => $options.openFolderPicker && $options.openFolderPicker(...args), [\"stop\", \"prevent\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\"\n })], 10, _hoisted_6)]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"input\", {\n ref: \"folderInput\",\n class: \"folder-upload-input\",\n type: \"file\",\n webkitdirectory: \"\",\n directory: \"\",\n multiple: \"\",\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleFolderSelection && $options.handleFolderSelection(...args))\n }, null, 544)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"paste-card-method-group\", {\n 'is-external': $data.pasteUploadMethod === 'external'\n }]),\n role: \"group\",\n \"aria-label\": _ctx.$t('upload.switchUploadMethod')\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'save'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'save',\n onClick: _cache[6] || (_cache[6] = $event => $data.pasteUploadMethod = 'save')\n }, _toDisplayString(_ctx.$t('upload.pasteSave')), 11, _hoisted_10), _createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'external'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'external',\n onClick: _cache[7] || (_cache[7] = $event => $data.pasteUploadMethod = 'external')\n }, _toDisplayString(_ctx.$t('upload.pasteExternal')), 11, _hoisted_11)], 10, _hoisted_9)])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-copy\",\n onClick: _cache[8] || (_cache[8] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-retry\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.uid,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[11] || (_cache[11] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])])]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\r\n * URL 构建工具函数\r\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\r\n */\r\n\r\n/**\r\n * 根据 srcID 和文件名生成所有格式的 URL\r\n * @param {string} srcID - 文件资源 ID\r\n * @param {string} name - 文件名\r\n * @param {string} rootUrl - 链接前缀\r\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\r\n */\r\nexport function buildFileUrls(srcID, name, rootUrl) {\r\n const url = rootUrl + srcID\r\n return {\r\n finalURL: url,\r\n mdURL: `![${name}](${url})`,\r\n htmlURL: `\"${name}\"`,\r\n ubbURL: `[img]${url}[/img]`\r\n }\r\n}\r\n\r\n/**\r\n * 根据 selectedUrlForm 获取对应格式的 URL 值\r\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\r\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\r\n * @returns {string}\r\n */\r\nexport function getUrlByFormat(file, format) {\r\n const map = {\r\n url: file.finalURL,\r\n md: file.mdURL,\r\n html: file.htmlURL,\r\n ubb: file.ubbURL\r\n }\r\n return map[format] || file.finalURL\r\n}\r\n\r\n/**\r\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\r\n * @param {Array} fileList - 文件列表\r\n * @param {string} rootUrl - 新的链接前缀\r\n */\r\nexport function updateFileListUrls(fileList, rootUrl) {\r\n fileList.forEach(item => {\r\n if (item.uploadChannel === 'external') {\r\n return\r\n }\r\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\r\n Object.assign(item, urls)\r\n })\r\n}\r\n","/**\r\n * SHA256 计算工具\r\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\r\n */\r\n\r\n// SHA256 常量\r\nconst K = new Uint32Array([\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n])\r\n\r\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\r\n\r\nfunction processBlock(block, H) {\r\n const W = new Uint32Array(64)\r\n\r\n for (let i = 0; i < 16; i++) {\r\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\r\n }\r\n\r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\r\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\r\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\r\n }\r\n\r\n let [a, b, c, d, e, f, g, h] = H\r\n\r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\r\n const ch = (e & f) ^ (~e & g)\r\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\r\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\r\n const maj = (a & b) ^ (a & c) ^ (b & c)\r\n const temp2 = (S0 + maj) >>> 0\r\n\r\n h = g; g = f; f = e\r\n e = (d + temp1) >>> 0\r\n d = c; c = b; b = a\r\n a = (temp1 + temp2) >>> 0\r\n }\r\n\r\n H[0] = (H[0] + a) >>> 0\r\n H[1] = (H[1] + b) >>> 0\r\n H[2] = (H[2] + c) >>> 0\r\n H[3] = (H[3] + d) >>> 0\r\n H[4] = (H[4] + e) >>> 0\r\n H[5] = (H[5] + f) >>> 0\r\n H[6] = (H[6] + g) >>> 0\r\n H[7] = (H[7] + h) >>> 0\r\n}\r\n\r\n/**\r\n * 创建增量 SHA256 哈希器\r\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\r\n */\r\nexport function createSha256() {\r\n let H = new Uint32Array([\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ])\r\n\r\n let buffer = new Uint8Array(64)\r\n let bufferLength = 0\r\n let totalLength = 0\r\n\r\n return {\r\n update(data) {\r\n totalLength += data.length\r\n let offset = 0\r\n\r\n if (bufferLength > 0) {\r\n const needed = 64 - bufferLength\r\n const toCopy = Math.min(needed, data.length)\r\n buffer.set(data.subarray(0, toCopy), bufferLength)\r\n bufferLength += toCopy\r\n offset = toCopy\r\n\r\n if (bufferLength === 64) {\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n }\r\n\r\n while (offset + 64 <= data.length) {\r\n processBlock(data.subarray(offset, offset + 64), H)\r\n offset += 64\r\n }\r\n\r\n if (offset < data.length) {\r\n buffer.set(data.subarray(offset), 0)\r\n bufferLength = data.length - offset\r\n }\r\n },\r\n digest() {\r\n const bitLength = totalLength * 8\r\n\r\n // Padding\r\n buffer[bufferLength++] = 0x80\r\n\r\n if (bufferLength > 56) {\r\n buffer.fill(0, bufferLength, 64)\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n\r\n buffer.fill(0, bufferLength, 56)\r\n\r\n // Length in bits (big-endian, 64-bit)\r\n const view = new DataView(buffer.buffer)\r\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\r\n view.setUint32(60, bitLength >>> 0, false)\r\n\r\n processBlock(buffer, H)\r\n\r\n // Convert to hex\r\n let hex = ''\r\n for (let i = 0; i < 8; i++) {\r\n hex += H[i].toString(16).padStart(8, '0')\r\n }\r\n return hex\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 计算文件的 SHA256 哈希\r\n * 使用增量哈希算法,支持任意大小文件\r\n * @param {File} file - 要计算哈希的文件\r\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\r\n */\r\nexport async function computeSha256(file) {\r\n const sha256 = createSha256()\r\n\r\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\r\n let offset = 0\r\n\r\n while (offset < file.size) {\r\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\r\n const buffer = await chunk.arrayBuffer()\r\n sha256.update(new Uint8Array(buffer))\r\n offset += CHUNK_SIZE\r\n\r\n // 每处理 20MB 打印一次进度\r\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\r\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\r\n }\r\n }\r\n\r\n return sha256.digest()\r\n}\r\n","function normalizePath(path = '') {\r\n return String(path)\r\n .replace(/\\\\/g, '/')\r\n .split('/')\r\n .filter(segment => segment && segment !== '.')\r\n .map(segment => segment === '..' ? '_' : segment)\r\n .join('/')\r\n}\r\n\r\nexport function getRelativeDirectory(relativePath = '') {\r\n const normalizedPath = normalizePath(relativePath)\r\n const lastSlashIndex = normalizedPath.lastIndexOf('/')\r\n return lastSlashIndex === -1 ? '' : normalizedPath.slice(0, lastSlashIndex)\r\n}\r\n\r\nexport function joinUploadFolder(baseFolder = '', relativeDirectory = '') {\r\n const hasLeadingSlash = /^[\\\\/]/.test(String(baseFolder).trim())\r\n const joinedPath = [normalizePath(baseFolder), normalizePath(relativeDirectory)]\r\n .filter(Boolean)\r\n .join('/')\r\n\r\n if (!joinedPath) return ''\r\n return hasLeadingSlash ? `/${joinedPath}` : joinedPath\r\n}\r\n\r\nexport function filesToUploadEntries(files = []) {\r\n return Array.from(files).map(file => ({\r\n file,\r\n relativePath: normalizePath(file.webkitRelativePath || file.relativePath || file.name)\r\n }))\r\n}\r\n\r\nfunction readFileEntry(entry) {\r\n return new Promise((resolve, reject) => entry.file(resolve, reject))\r\n}\r\n\r\nasync function readAllDirectoryEntries(directoryEntry) {\r\n const reader = directoryEntry.createReader()\r\n const entries = []\r\n\r\n // Chromium may return directory entries in batches (commonly 100 at a time).\r\n while (true) {\r\n const batch = await new Promise((resolve, reject) => reader.readEntries(resolve, reject))\r\n if (!batch.length) break\r\n entries.push(...batch)\r\n }\r\n\r\n return entries\r\n}\r\n\r\nasync function collectFromEntry(entry, parentPath, result) {\r\n const relativePath = normalizePath([parentPath, entry.name].filter(Boolean).join('/'))\r\n\r\n if (entry.isFile) {\r\n const file = await readFileEntry(entry)\r\n result.push({ file, relativePath })\r\n return\r\n }\r\n\r\n if (entry.isDirectory) {\r\n const children = await readAllDirectoryEntries(entry)\r\n for (const child of children) {\r\n await collectFromEntry(child, relativePath, result)\r\n }\r\n }\r\n}\r\n\r\nasync function collectFromHandle(handle, parentPath, result) {\r\n const relativePath = normalizePath([parentPath, handle.name].filter(Boolean).join('/'))\r\n\r\n if (handle.kind === 'file') {\r\n result.push({ file: await handle.getFile(), relativePath })\r\n return\r\n }\r\n\r\n if (handle.kind === 'directory') {\r\n for await (const child of handle.values()) {\r\n await collectFromHandle(child, relativePath, result)\r\n }\r\n }\r\n}\r\n\r\nexport async function collectFilesFromDataTransferItems(items = []) {\r\n const fileItems = Array.from(items).filter(item => item.kind === 'file')\r\n const result = []\r\n\r\n // Resolve handles while still in the drop/paste event call chain when possible.\r\n const handles = await Promise.all(fileItems.map(async item => {\r\n if (typeof item.getAsFileSystemHandle !== 'function') return null\r\n try {\r\n return await item.getAsFileSystemHandle()\r\n } catch {\r\n return null\r\n }\r\n }))\r\n\r\n for (let index = 0; index < fileItems.length; index++) {\r\n const item = fileItems[index]\r\n const handle = handles[index]\r\n\r\n if (handle) {\r\n await collectFromHandle(handle, '', result)\r\n continue\r\n }\r\n\r\n const entry = typeof item.webkitGetAsEntry === 'function' ? item.webkitGetAsEntry() : null\r\n if (entry) {\r\n await collectFromEntry(entry, '', result)\r\n continue\r\n }\r\n\r\n const file = item.getAsFile?.()\r\n if (file) result.push(...filesToUploadEntries([file]))\r\n }\r\n\r\n return result\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport { collectFilesFromDataTransferItems, filesToUploadEntries, getRelativeDirectory, joinUploadFolder } from '@/utils/upload/directoryTraversal';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n localUidCounter: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map(),\n // 存储每个文件的 AbortController\n pasteFocusTarget: null\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n pasteShortcut() {\n const platform = navigator.userAgentData?.platform || navigator.platform || '';\n return /mac|iphone|ipad|ipod/i.test(platform) ? 'Cmd + V' : 'Ctrl + V';\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n document.addEventListener('keydown', this.handlePasteShortcut);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n document.removeEventListener('keydown', this.handlePasteShortcut);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n createLocalUid() {\n this.localUidCounter += 1;\n return `local-${Date.now()}-${this.localUidCounter}`;\n },\n applyUploadPath(file, relativePath = file.name) {\n const normalizedRelativePath = String(relativePath || file.name).replace(/\\\\/g, '/').replace(/^\\/+/, '');\n file.uploadRelativePath = normalizedRelativePath;\n file.uploadFolder = joinUploadFolder(this.uploadFolder, getRelativeDirectory(normalizedRelativePath));\n return file;\n },\n copyUploadPath(sourceFile, targetFile) {\n targetFile.uploadRelativePath = sourceFile.uploadRelativePath || sourceFile.name;\n targetFile.uploadFolder = sourceFile.uploadFolder ?? this.uploadFolder;\n return targetFile;\n },\n getFileUploadFolder(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n return fileItem?.uploadFolder ?? file.file.uploadFolder ?? this.uploadFolder;\n },\n createUploadRequest(file) {\n return {\n file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, uploadedFile) => this.handleSuccess(response, uploadedFile),\n onError: (error, uploadedFile) => this.handleError(error, uploadedFile)\n };\n },\n async uploadLocalEntries(entries) {\n await Promise.allSettled(entries.map(async ({\n file,\n relativePath\n }) => {\n file.uid = this.createLocalUid();\n this.applyUploadPath(file, relativePath);\n const processedFile = await this.beforeUpload(file);\n if (processedFile instanceof File) {\n this.uploadFile(this.createUploadRequest(processedFile));\n }\n }));\n },\n openFolderPicker() {\n this.$refs.folderInput?.click();\n },\n async handleFolderSelection(event) {\n const entries = filesToUploadEntries(event.target.files);\n event.target.value = '';\n await this.uploadLocalEntries(entries);\n },\n async handleDrop(event) {\n const dataTransfer = event.dataTransfer;\n if (!dataTransfer) return;\n const entries = dataTransfer.items?.length ? await collectFilesFromDataTransferItems(dataTransfer.items) : filesToUploadEntries(dataTransfer.files);\n if (entries.length) await this.uploadLocalEntries(entries);\n },\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n const targetUploadFolder = this.getFileUploadFolder(file);\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n const targetUploadFolder = this.getFileUploadFolder(file);\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(targetUploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.uploadRelativePath || file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n uploadFolder: file.uploadFolder ?? this.uploadFolder,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n this.copyUploadPath(processedFile, newFile);\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n pushFileToQueue(newFile, needServerCompress);\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n isEditablePasteTarget(target) {\n const element = target?.nodeType === Node.TEXT_NODE ? target.parentElement : target;\n if (!element) return false;\n const tagName = element.tagName;\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || element.isContentEditable || Boolean(element.closest?.('[contenteditable=\"true\"]'));\n },\n handlePasteShortcut(event) {\n const isPasteShortcut = (event.ctrlKey || event.metaKey) && !event.altKey && String(event.key).toLowerCase() === 'v';\n if (!isPasteShortcut || this.isEditablePasteTarget(event.target)) return;\n const receiver = this.$refs.clipboardPasteReceiver;\n if (!receiver) return;\n this.pasteFocusTarget = document.activeElement;\n receiver.value = '';\n try {\n receiver.focus({\n preventScroll: true\n });\n } catch {\n receiver.focus();\n }\n },\n releasePasteReceiver(target) {\n const receiver = this.$refs.clipboardPasteReceiver;\n if (!receiver || target !== receiver) return;\n receiver.value = '';\n const focusTarget = this.pasteFocusTarget;\n this.pasteFocusTarget = null;\n setTimeout(() => {\n if (focusTarget?.isConnected && typeof focusTarget.focus === 'function') {\n try {\n focusTarget.focus({\n preventScroll: true\n });\n } catch {\n focusTarget.focus();\n }\n } else {\n receiver.blur();\n }\n if (document.activeElement === receiver) receiver.blur();\n }, 0);\n },\n async handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n const isPasteReceiver = event.target === this.$refs.clipboardPasteReceiver;\n if (!isPasteReceiver && this.isEditablePasteTarget(event.target)) {\n return;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) {\n this.releasePasteReceiver(event.target);\n return;\n }\n const items = Array.from(clipboardData.items || []);\n const fileItems = items.filter(item => item.kind === 'file');\n const stringItems = items.filter(item => item.kind === 'string');\n const fileEntries = filesToUploadEntries(clipboardData.files || []);\n if (isPasteReceiver) event.preventDefault();\n this.releasePasteReceiver(event.target);\n if (fileEntries.length > 0 || fileItems.length > 0) {\n event.preventDefault();\n let entries = [];\n if (fileItems.length) {\n try {\n entries = await collectFilesFromDataTransferItems(fileItems);\n } catch (error) {\n console.warn('Failed to parse clipboard items, falling back to clipboard files:', error);\n }\n }\n // Safari may expose file items without supporting their entry APIs.\n if (!entries.length) entries = fileEntries;\n if (entries.length) await this.uploadLocalEntries(entries);\n }\n if (stringItems.length > 0) this.uploadFromUrl(stringItems);\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const targetUploadFolder = this.getFileUploadFolder(file);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: targetUploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n this.copyUploadPath(file, webpFile);\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=a42a2866&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=a42a2866&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a42a2866\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=28b8eda7&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=28b8eda7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28b8eda7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"quick-toolbar-actions\"\n};\nconst _hoisted_4 = {\n class: \"quick-toolbar-actions-inner\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"title-crayon-text\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_8 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_9 = {\n class: \"dialog-section\"\n};\nconst _hoisted_10 = {\n class: \"section-header\"\n};\nconst _hoisted_11 = {\n class: \"section-title\"\n};\nconst _hoisted_12 = {\n class: \"section-content\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"setting-item\"\n};\nconst _hoisted_18 = {\n class: \"setting-label\"\n};\nconst _hoisted_19 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n class: \"setting-label\"\n};\nconst _hoisted_21 = {\n class: \"dialog-action\"\n};\nconst _hoisted_22 = [\"innerHTML\"];\nconst _hoisted_23 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quick-toolbar\", {\n 'is-expanded': $data.isQuickToolbarOpen\n }]),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleQuickToolbarLeave && $options.handleQuickToolbarLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.logout'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleQuickToolbarCommand('logout'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.manage'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleQuickToolbarCommand('manage'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleQuickToolbarCommand('linkFormat'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: $options.openCompressDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_button, {\n class: _normalizeClass([\"quick-toolbar-button quick-toolbar-more\", {\n 'is-active': $data.isQuickToolbarOpen\n }]),\n \"aria-expanded\": $data.isQuickToolbarOpen,\n onMouseenter: $options.handleQuickToolbarMoreEnter,\n onClick: $options.toggleQuickToolbar\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"quick-toolbar-icon quick-toolbar-toggle-icon\"\n })]),\n _: 1\n }, 8, [\"class\", \"aria-expanded\", \"onMouseenter\", \"onClick\"])], 34), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString($options.ownerName) + \" ImgHub\", 1), _createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[24] || (_cache[24] = _createTextVNode(\" ImgHub \", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_21, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[9] || (_cache[9] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[12] || (_cache[12] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[13] || (_cache[13] = $event => $data.channelName = $event),\n availableChannels: $data.availableChannels,\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[14] || (_cache[14] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[15] || (_cache[15] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[16] || (_cache[16] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[17] || (_cache[17] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[18] || (_cache[18] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[19] || (_cache[19] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[20] || (_cache[20] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[21] || (_cache[21] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"availableChannels\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_23, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.acknowledgeAnnouncement\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_22)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[23] || (_cache[23] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n isQuickToolbarOpen: false,\n isQuickToolbarPinned: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n displayedAnnouncementRefreshAt: null,\n // 当前弹窗所展示的公告版本\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', true, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n this.showAnnouncementIfNeeded();\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleQuickToolbarMoreEnter() {\n this.isQuickToolbarOpen = true;\n },\n handleQuickToolbarLeave() {\n if (!this.isQuickToolbarPinned) {\n this.isQuickToolbarOpen = false;\n }\n },\n toggleQuickToolbar() {\n this.isQuickToolbarPinned = !this.isQuickToolbarPinned;\n this.isQuickToolbarOpen = this.isQuickToolbarPinned;\n },\n closeQuickToolbar() {\n this.isQuickToolbarPinned = false;\n this.isQuickToolbarOpen = false;\n },\n handleQuickToolbarCommand(command) {\n this.closeQuickToolbar();\n if (command === 'linkFormat') {\n this.openUrlDialog();\n } else if (command === 'manage') {\n this.handleManage();\n } else if (command === 'logout') {\n this.handleLogout();\n }\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.openAnnouncement(announcement);\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n getAnnouncementRefreshAt() {\n const refreshAt = Number(this.userConfig?.announcementRefreshAt);\n return Number.isFinite(refreshAt) && refreshAt > 0 ? refreshAt : null;\n },\n openAnnouncement(announcement) {\n this.announcementContent = announcement;\n this.displayedAnnouncementRefreshAt = this.getAnnouncementRefreshAt();\n this.showAnnouncementDialog = true;\n },\n showAnnouncementIfNeeded() {\n const announcement = this.userConfig?.announcement;\n if (!announcement) return;\n const refreshAt = this.getAnnouncementRefreshAt();\n if (refreshAt) {\n const acknowledgedRefreshAt = Number(localStorage.getItem('announcementAcknowledgedRefreshAt'));\n if (!Number.isFinite(acknowledgedRefreshAt) || refreshAt > acknowledgedRefreshAt) {\n this.openAnnouncement(announcement);\n }\n return;\n }\n\n // 尚未产生刷新时间的旧公告在升级后再展示一次,确认后使用新版时间标记。\n if (!localStorage.getItem('announcementAcknowledgedAt')) {\n this.openAnnouncement(announcement);\n }\n },\n acknowledgeAnnouncement() {\n localStorage.setItem('announcementAcknowledgedAt', String(Date.now()));\n if (this.displayedAnnouncementRefreshAt) {\n localStorage.setItem('announcementAcknowledgedRefreshAt', String(this.displayedAnnouncementRefreshAt));\n }\n this.showAnnouncementDialog = false;\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=15adb2dc&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=15adb2dc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-15adb2dc\"]])\n\nexport default __exports__"],"names":["_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","href","logoHref","target","class","logo","link","logoClasses","alt","src","logoUrl","name","props","type","String","default","validator","value","includes","customSrc","position","size","enableHover","Boolean","useConfigLink","computed","this","userConfig","logoLink","__exports__","t","e","module","exports","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","__esModule","create","bind","prototype","hasOwnProperty","p","s","some","a","f","g","w","b","PNG","JPEG","GIF","Promise","u","next","throw","done","then","apply","toDataURL","toBlob","split","match","atob","length","Uint8Array","charCodeAt","Blob","Image","onload","onerror","Error","document","createElement","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","accuracy","filter","sort","abs","pow","v","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_font_awesome_icon","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","trigger","transition","reference","onClick","$slots","undefined","error","icon","fetchDirectoryTree","$t","_","ref","data","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","loading","args","openDrawer","modelValue","drawerVisible","direction","title","source","children","label","windowWidth","innerWidth","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","axios","withAuthCode","tree","err","console","startsWith","$emit","id","handleToggleClick","mode","isAuto","style","isDark","viewBox","fill","stroke","x","cx","cy","mask","opacity","x1","y1","x2","y2","$store","getters","useDarkMode","cusDarkMode","commit","validateFolderPath","strict","trim","valid","i18n","global","test","dotPattern","invalidChars","isRedirecting","async","url","options","credentials","headers","router","push","finally","disableFooter","thisYear","footerLink","getFullYear","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","required","icons","cfr2","s3","discord","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_component_el_tooltip","show","count","totalCount","content","circle","toggleViewMode","viewMode","clearHistory","historyList","onScroll","handleScroll","groupedHistory","group","date","items","item","time","isImage","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","formatTime","hasMore","loadingMore","spin","allHistory","pageSize","currentPage","val","resetAndLoad","groups","forEach","dateStr","getMonth","padStart","getDate","keys","map","savedMode","localStorage","getItem","loadAllHistory","loadMore","history","JSON","parse","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","removeItem","$message","success","catch","stringify","fileName","imageExtensions","extension","pop","toLowerCase","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","open","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_component_el_radio_button","_component_el_radio_group","_component_ChannelIcon","_component_el_radio","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","dialogWidth","channelVisibility","onChange","handleChannelVisibilityChange","uploadChannel","visibleChannelOptions","channel","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","CHANNEL_OPTIONS","components","ChannelIcon","hasConfiguredChannels","channelType","channels","availableChannels","Array","isArray","visibility","ensureConfiguredChannelSelected","firstConfiguredChannel","emits","handler","deep","set","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","tabindex","_component_el_upload","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","onDropCapture","handleDrop","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","innerHTML","pasteShortcut","disabled","disableTooltip","openFolderPicker","webkitdirectory","directory","handleFolderSelection","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","role","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","copyAll","dropdown","autoReUpload","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","uid","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","K","Uint32Array","rotr","processBlock","block","H","W","s0","s1","S1","temp1","S0","maj","temp2","createSha256","buffer","bufferLength","totalLength","update","offset","needed","toCopy","subarray","digest","bitLength","view","DataView","setUint32","floor","hex","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","normalizePath","replace","segment","join","getRelativeDirectory","relativePath","normalizedPath","lastSlashIndex","joinUploadFolder","baseFolder","relativeDirectory","hasLeadingSlash","joinedPath","filesToUploadEntries","files","from","webkitRelativePath","readFileEntry","entry","resolve","reject","readAllDirectoryEntries","directoryEntry","reader","createReader","entries","batch","readEntries","collectFromEntry","parentPath","isFile","isDirectory","child","collectFromHandle","handle","kind","values","getFile","collectFilesFromDataTransferItems","fileItems","handles","all","getAsFileSystemHandle","index","webkitGetAsEntry","getAsFile","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","localUidCounter","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","pasteFocusTarget","scrollContainer","setScrollTop","immediate","platform","userAgentData","location","protocol","host","handlePaste","handlePasteShortcut","storeAutoReUpload","createLocalUid","applyUploadPath","normalizedRelativePath","uploadRelativePath","copyUploadPath","sourceFile","targetFile","getFileUploadFolder","fileItem","find","createUploadRequest","onProgress","evt","uploadedFile","uploadLocalEntries","allSettled","processedFile","File","folderInput","click","dataTransfer","waitingItem","uploadingItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","targetUploadFolder","abortController","AbortController","formData","FormData","append","encodeURIComponent","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","percent","res","code","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","pool","currentIndex","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","saveToHistory","newRecord","scheduleAutoRetry","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","newFile","controller","clear","isEditablePasteTarget","element","nodeType","Node","TEXT_NODE","parentElement","tagName","isContentEditable","closest","isPasteShortcut","ctrlKey","metaKey","altKey","receiver","clipboardPasteReceiver","activeElement","focus","preventScroll","releasePasteReceiver","focusTarget","isConnected","blur","isPasteReceiver","clipboardData","stringItems","fileEntries","preventDefault","uploadFromUrl","validUrls","getAsString","callback","mdUrl","htmlUrl","ubbUrl","text","urlPattern","post","responseType","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","checkResult","retryFailedFiles","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","etag","partNumber","progress","completeResponse","oid","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","normalizeDirectoryPath","inputRef","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","acknowledgeAnnouncement","announcementContent","showHistory","onClose","mixins","backgroundManager","useDefaultWallPaper","isQuickToolbarPinned","displayedAnnouncementRefreshAt","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","strictResult","storeUploadFolder","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","showAnnouncementIfNeeded","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","handleManage","$router","defaultValue","num","parseFloat","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","openAnnouncement","info","getAnnouncementRefreshAt","refreshAt","announcementRefreshAt","isFinite","acknowledgedRefreshAt"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/799.b7d288ff.js.map.gz b/frontend-dist/js/799.b7d288ff.js.map.gz deleted file mode 100644 index 0c429e091e2ed0385a8882ed455e5f7fff6143b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85151 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

q@7df#ZRMoTQ{slE*}QRdpetvTV`64Wc!OL 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.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.adminRequired)return l.A.commit("setAdminLoggedIn",!0),t();if(o.valid&&"admin"===o.authType)return l.A.commit("setAdminLoggedIn",!0),t();const i=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()}).catch(()=>{const a=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()})},d=(e,a,t)=>{i.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.userRequired)return l.A.commit("setUserLoggedIn",!0),t();if(o.valid)return l.A.commit("setUserLoggedIn",!0),t();const i=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()}).catch(()=>{const a=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()})},c=[{path:"/",name:"home",component:()=>Promise.all([t.e(903),t.e(173),t.e(473),t.e(799)]).then(t.bind(t,97799)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(206)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(473),t.e(596)]).then(t.bind(t,73044)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(223)]).then(t.bind(t,94223)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(417)]).then(t.bind(t,52417)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(746)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>Promise.all([t.e(903),t.e(711)]).then(t.bind(t,5215))},{path:"/whiteliston",name:"whiteliston",component:()=>Promise.all([t.e(903),t.e(773)]).then(t.bind(t,86569))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(385).then(t.bind(t,57385))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>Promise.all([t.e(903),t.e(787)]).then(t.bind(t,75875))}],u=(0,o.aE)({history:(0,o.LA)("/"),routes:c});a.A=u},25507:function(e,a,t){t(18111),t(61701);var o=t(60782),n=t(457),l=t(55131);a.A=(0,o.y$)({state:{userConfig:null,bingWallPapers:[],adminLoggedIn:!1,userLoggedIn:!1,uploadMethod:"default",uploadCopyUrlForm:"",compressConfig:{customerCompress:void 0,compressQuality:void 0,compressBar:void 0,serverCompress:void 0,convertToWebp:void 0},storeUploadChannel:"",storeChannelName:null,storeAutoRetry:!0,storeUploadNameType:"",uploadFolder:"",customUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},adminUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},autoReUpload:!0,useDarkMode:null,cusDarkMode:!1},getters:{userConfig:e=>e.userConfig,bingWallPapers:e=>e.bingWallPapers,adminLoggedIn:e=>e.adminLoggedIn,userLoggedIn:e=>e.userLoggedIn,storeUploadMethod:e=>e.uploadMethod,uploadCopyUrlForm:e=>e.uploadCopyUrlForm,compressConfig:e=>e.compressConfig,storeUploadChannel:e=>e.storeUploadChannel,storeChannelName:e=>e.storeChannelName,storeUploadNameType:e=>e.storeUploadNameType,customUrlSettings:e=>e.customUrlSettings,storeAutoRetry:e=>e.storeAutoRetry,adminUrlSettings:e=>e.adminUrlSettings,storeUploadFolder:e=>e.uploadFolder||localStorage.getItem("uploadFolder")||"",useDarkMode:e=>e.useDarkMode,cusDarkMode:e=>e.cusDarkMode,storeAutoReUpload:e=>e.autoReUpload},mutations:{setUserConfig(e,a){e.userConfig=a},setBingWallPapers(e,a){e.bingWallPapers=a},setAdminLoggedIn(e,a){e.adminLoggedIn=a},setUserLoggedIn(e,a){e.userLoggedIn=a},setUploadMethod(e,a){e.uploadMethod=a},setUploadCopyUrlForm(e,a){e.uploadCopyUrlForm=a},setCompressConfig(e,{key:a,value:t}){e.compressConfig[a]=t},setStoreUploadChannel(e,a){e.storeUploadChannel=a},setStoreChannelName(e,a){e.storeChannelName=a},setStoreUploadNameType(e,a){e.storeUploadNameType=a},setCustomUrlSettings(e,{key:a,value:t}){e.customUrlSettings[a]=t},setStoreAutoRetry(e,a){e.storeAutoRetry=a},setAdminUrlSettings(e,{key:a,value:t}){e.adminUrlSettings[a]=t},setUseDarkMode(e,a){e.useDarkMode=a},setCusDarkMode(e,a){e.cusDarkMode=a},setStoreUploadFolder(e,a){e.uploadFolder=a,localStorage.setItem("uploadFolder",a)},setStoreAutoReUpload(e,a){e.autoReUpload=a}},actions:{async fetchUserConfig({commit:e}){try{const a=await n.A.get("/api/userConfig");e("setUserConfig",a.data)}catch(a){console.log(a)}},async fetchBingWallPapers({commit:e}){try{const a=await n.A.get("/api/bing/wallpaper"),t=a.data.data,o=t.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(o.map(e=>new Promise((a,t)=>{const o=new Image;o.onload=a,o.onerror=t,o.src=e.url}))),e("setBingWallPapers",o)}catch(a){console.log(a)}}},modules:{},plugins:[(0,l.A)({paths:["userConfig","uploadMethod","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode"]})]})},46638:function(e,a,t){t.d(a,{Ay:function(){return f},BY:function(){return h},xS:function(){return g}});t(17642),t(58004),t(33853),t(45876),t(32475),t(15024),t(31698);var o=t(85384),n=JSON.parse('{"login":{"title":"登录到 {owner} 图床","adminTitle":"管理端登录","password":"密码","username":"用户名","passwordPlaceholder":"请输入认证码","usernamePlaceholder":"请输入用户名","adminPasswordPlaceholder":"请输入密码","submit":"登录","success":"登录成功","failed":"登录失败,请检查密码是否正确","adminFailed":"用户名或密码错误","serverError":"服务器错误","systemError":"系统错误","authRequired":"请先认证!","authFailed":"认证失败!"},"upload":{"folderPlaceholder":"上传目录","pasteUpload":"粘贴上传","fileUpload":"文件上传","selectFolderUpload":"选择文件夹上传","dragUploadText":"拖拽 点击 或 {pasteShortcut} 粘贴上传","pasteUrlPlaceholder":"粘贴外链上传,多个外链用换行分隔","pasteUploadBtn":"上 传","pasteSave":"转存","pasteExternal":"外链","history":"上传记录","announcement":"查看公告","noAnnouncement":"暂无公告","announcementTitle":"公告","announcementAck":"我已知晓!","settings":"上传设置","linkFormat":"链接格式","manage":"系统管理","logout":"退出登录","logoutSuccess":"已退出登录","viewDocs":"查看文档","switchUploadMethod":"切换上传方式","copyAll":"整体复制","retryFailed":"失败重试","clearList":"清空列表","clearAll":"清空全部","clearUploaded":"清空已上传"},"uploadForm":{"deleted":"{name}已删除","uploadSuccess":"{name}上传成功","uploadFailed":"{name}上传失败","compressFailedCannotUpload":"{name}压缩失败,无法上传!","fileTooLarge":"{name}文件过大,无法上传!","compressedFileTooLarge":"{name}压缩后文件过大,无法上传!","copySuccess":"复制成功","copyFailed":"复制失败","copyAllSuccess":"整体复制成功","fileNotUploaded":"文件未上传成功,无法复制链接","fileListCleared":"文件列表已清空","fileListEmpty":"文件列表为空","successFilesCleared":"成功上传文件已清空","successFilesEmpty":"成功上传文件为空","noFailedFiles":"无上传失败文件","autoRetryOn":"自动重试已开启","autoRetryOff":"自动重试已关闭","autoRetry":"自动重试","maxRetryReached":"{name} 已达到最大重试次数({max}),停止重试","urlRequestFailed":"粘贴板中的URL地址请求失败","chunkMerging":"分块上传完成,正在合并文件,请耐心等待...","fileSizeTooLarge":"文件过大","chunkInitFailed":"初始化分块上传失败","uploadError":"上传过程中发生错误","imageLoadFailed":"图片加载失败"},"uploadSettings":{"title":"上传设置","uploadChannel":"上传渠道","channelType":"渠道类型","allChannels":"全部","configuredChannelsOnly":"已配置","noConfiguredChannels":"暂无已配置渠道","channelName":"渠道名称","channelNameTooltip":"选择具体的渠道名称,不选择则使用负载均衡或默认渠道","autoSelect":"自动选择","uploadDirectory":"上传目录","uploadDirectoryPlaceholder":"请输入上传目录路径","autoSwitch":"自动切换","autoSwitchTooltip":"对于非分块上传文件,上传失败自动切换到其他渠道上传","fileNaming":"文件命名方式","namingDefault":"默认","namingIndex":"仅前缀","namingOrigin":"仅原名","namingShort":"短链接","filePreprocess":"文件预处理","filePreprocessTooltip":"上传前在本地进行格式转换和压缩,仅对图片文件生效","convertToWebp":"转换为WebP","convertToWebpTooltip":"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传","fileCompress":"文件压缩","compressThreshold":"压缩阈值","compressThresholdTooltip":"设置图片大小阈值,超过此值将自动压缩,单位MB","expectedSize":"期望大小","expectedSizeTooltip":"设置压缩后图片大小期望值,单位MB","serverCompress":"服务端压缩","serverCompressTooltip":"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题","enableCompress":"开启压缩","confirm":"确定"},"uploadHistory":{"title":"历史记录","totalRecords":"共 {count} 条","switchView":"切换视图","clearRecords":"清空记录","loading":"加载中...","pullToLoadMore":"下拉加载更多","noMoreRecords":"没有更多记录了","emptyHistory":"暂无上传记录","linkCopied":"链接已复制","copyFailed":"复制失败","clearConfirmTitle":"提示","clearConfirmMessage":"确定要清空所有上传记录吗?","clearConfirmOk":"确定","clearConfirmCancel":"取消","recordsCleared":"记录已清空","deleteConfirmMessage":"确定要删除这条记录吗?","recordDeleted":"记录已删除"},"settings":{"linkFormatTitle":"链接格式设置","defaultCopyLink":"默认复制链接","rawLink":"原始链接","customLink":"自定义链接","customLinkTooltip":"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入","enableCustom":"启用自定义","customPrefix":"自定义前缀","customPrefixPlaceholder":"请输入自定义链接前缀","confirm":"确定","s3Link":"S3链接"},"dashboard":{"searchPlaceholder":"搜索:#标签 -#排除标签","sortAsc":"升序","sortDesc":"降序","sortByTime":"时间","sortBySize":"大小","sortByRawName":"文件 ID","sortByFileName":"文件名","selectedItems":"项已选","clearSelection":"清除选择","copy":"复制","delete":"删除","download":"下载","move":"移动","tagManagement":"标签管理","addToBlacklist":"加入黑名单","addToWhitelist":"加入白名单","linkFormat":"链接格式","listView":"列表视图","cardView":"卡片视图","logout":"退出登录","rootDirectory":"根目录","totalFiles":"共 {count} 个文件","noMatchingFiles":"未找到匹配的文件或文件夹","currentDirEmpty":"当前目录为空","adjustSearchHint":"尝试调整搜索条件或筛选器","uploadHint":"上传文件后将显示在这里","loadMore":"加载更多","totalPages":"共 {count} 页","jumpTo":"跳至","preview":"预览","fileName":"文件名","tags":"标签","channelType":"渠道类型","channelNameCol":"渠道名称","uploadAddress":"上传地址","fileSize":"大小","uploadTime":"上传时间","actions":"操作","externalTag":"外链","unknownTag":"未知","detail":"详情","copyLink":"复制链接","moveFile":"移动","downloadFile":"下载","loadFailed":"加载失败","copySuccess":"复制成功","copyFailed":"复制失败","deleteConfirm":"此操作将永久删除该文件, 是否继续?","deleteConfirmTitle":"提示","deleteConfirmOk":"确定","deleteConfirmCancel":"取消","deleteSuccess":"删除成功","deleteFailed":"删除失败","blockConfirm":"此操作将把该文件加入黑名单, 是否继续?","blockSuccess":"加入黑名单成功","blockFailed":"加入黑名单失败","whiteConfirm":"此操作将把该文件加入白名单, 是否继续?","whiteSuccess":"加入白名单成功","whiteFailed":"加入白名单失败","deleteFolderConfirm":"此操作将永久删除文件夹, 是否继续?","deleteFileConfirm":"此操作将永久删除该文件, 是否继续?","batchDeleteConfirm":"此操作将永久删除选中的文件及文件夹, 是否继续?","batchDeleteSuccess":"批量删除成功","batchDeleteFailed":"批量删除失败","batchBlockConfirm":"此操作将把选中的文件加入黑名单, 是否继续?","batchBlockSuccess":"批量加入黑名单成功","batchBlockFailed":"批量加入黑名单失败","batchWhiteConfirm":"此操作将把选中的文件加入白名单, 是否继续?","batchWhiteSuccess":"批量加入白名单成功","batchWhiteFailed":"批量加入白名单失败","noLinksAvailable":"没有可复制的链接","batchCopySuccess":"批量复制 {count} 个链接成功","batchCopyFailed":"批量复制链接失败,请重试","batchCopyLinksSuccess":"批量复制链接成功","copyFileLinkSuccess":"复制文件链接成功","fileListMemoryCacheWarning":"文件列表较大,已切换为内存缓存;刷新页面后需要重新加载列表。","indexingWarning":"索引构建中,当前搜索和排序结果可能不准确,请稍后再试。","loadMoreFailed":"加载更多文件失败,请检查网络连接","moveSuccess":"移动成功","moveFailed":"移动失败","moveTargetSameAsCurrent":"目标文件夹不能是当前文件夹","invalidPageNumber":"请输入有效的页码","pageExceedsMax":"页码不能超过 {max}","loadingData":"正在加载数据,请稍候...","loadDataFailed":"加载数据失败,请检查网络连接","fetchFileListFailed":"获取文件列表失败","refreshFailed":"刷新失败,请重试","selectFilesFirst":"请先选择文件","syncDataError":"同步数据时出错,请检查网络连接","fetchingFileList":"正在获取文件列表...","folderEmptyNoLinks":"文件夹为空,没有可复制的链接","copiedFileLinks":"已复制 {count} 个文件链接","copyFolderLinksFailed":"复制文件夹链接失败,请重试"},"dashboardTabs":{"fileManagement":"文件管理","userManagement":"用户管理","systemSettings":"系统设置","fileUpload":"文件上传"},"fileDetail":{"title":"文件详情","download":"下载","tags":"标签","blacklist":"黑名单","whitelist":"白名单","deleteBtn":"删除","edit":"编辑","rename":"重命名","save":"保存","cancel":"取消","originUrl":"原始链接","fileNameLabel":"文件名","fileNamePlaceholder":"请输入文件名","fileType":"文件类型","fileTypePlaceholder":"如 image/jpeg","fileSizeLabel":"文件大小","imageDimensions":"图片尺寸","noDimensions":"无","uploadTimeLabel":"上传时间","channelTypeAndName":"渠道类型/名称","accessStatusAndReview":"访问状态/审查","uploadIP":"上传IP","uploadAddressLabel":"上传地址","fileTags":"文件标签","noTags":"暂无标签","unknown":"未知","accessNormal":"正常","accessNormalWhitelist":"正常(白名单)","accessBlockedBlacklist":"已屏蔽(黑名单)","accessBlockedReview":"已屏蔽(审查不通过)","orientationLandscape":"横","orientationPortrait":"竖","orientationSquare":"方","linkCopied":"链接已复制","metadataSaved":"元数据保存成功","metadataSaveFailed":"保存元数据失败","renameTitle":"重命名 File ID","renameLabel":"新 File ID","renamePlaceholder":"请输入新的 File ID","renameCancel":"取消","renameConfirm":"确认重命名","renameSuccess":"文件重命名成功","renameConflict":"目标文件名已存在","renameFailed":"重命名失败"},"filter":{"accessStatus":"访问状态","normal":"正常","blocked":"已屏蔽","blackWhiteList":"黑白名单","whiteList":"白名单","blackList":"黑名单","notSet":"未设置","reviewResult":"审查结果","teenContent":"12+内容","adultContent":"成人内容","fileType":"文件类型","image":"图片","video":"视频","audio":"音频","other":"其他","channelType":"渠道类型","externalLink":"外链","channelName":"渠道名称","clearFilters":"清除筛选"},"moveFile":{"title":"移动文件","batchTitle":"批量移动文件","targetDirectory":"目标目录","targetPlaceholder":"请输入目标目录路径","hint":"提示:路径以 / 开头表示根目录,如 /photos/2024/","hintMobile":"提示:路径以 / 开头表示根目录","selectDirectory":"选择目录","cancel":"取消","confirm":"确定","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadTreeFailed":"加载目录树失败,请检查网络连接"},"batchTag":{"title":"批量标签管理","addTab":"添加","removeTab":"移除","clearTab":"清空","addDescription":"为选中的 {count} 个文件添加标签","inputPlaceholder":"输入标签名称","pendingTags":"待添加的标签","noPendingTags":"暂无待添加标签","addToAllFiles":"添加到所有文件","removeDescription":"移除选中文件的共有标签","commonTags":"共有标签","noCommonTags":"选中的文件没有共有标签","clearDescription":"清空选中的 {count} 个文件的所有标签","clearWarningTitle":"⚠️警告","clearWarningDesc":"此操作将清空所有选中文件的标签,且不可恢复","confirmClearAll":"确认清空所有标签","tagAlreadyInList":"标签已在列表中","pleaseAddTags":"请先添加要批量添加的标签","addSuccess":"成功为 {count} 个文件添加标签","addFailed":"批量添加标签失败","removeSuccess":"成功从 {count} 个文件中移除标签","removeFailed":"移除标签失败","clearConfirmMessage":"确定要清空选中的 {count} 个文件的所有标签吗?此操作不可恢复。","clearConfirmTitle":"确认清空","clearConfirmOk":"确定","clearConfirmCancel":"取消","clearCancelled":"已取消清空操作","clearSuccess":"成功清空 {count} 个文件的标签","clearFailed":"清空标签失败","loadCommonTagsFailed":"加载共有标签失败"},"tagManagement":{"title":"标签管理","inputPlaceholder":"输入标签名称","currentTags":"当前标签","noTags":"暂无标签","popularTags":"常用标签","loading":"加载中...","noPopularTags":"暂无常用标签","close":"关闭","tagExists":"标签已存在","addSuccess":"标签添加成功","addFailed":"添加标签失败","removeSuccess":"标签删除成功","removeFailed":"删除标签失败","loadFailed":"加载标签失败"},"mobileAction":{"viewDetail":"查看详情","copyLink":"复制链接","downloadFile":"下载文件","moveFile":"移动文件","tagManagement":"标签管理","moveFolder":"移动文件夹","deleteFile":"删除文件","deleteFolder":"删除文件夹"},"mobileDirectory":{"title":"目录导航","rootDirectory":"根目录","goBack":"返回上一级"},"sysConfig":{"logout":"退出登录"},"sysConfigTabs":{"systemStatus":"系统状态","uploadSettings":"上传设置","securitySettings":"安全设置","pageSettings":"网页设置","otherSettings":"其他设置"},"dateRangeCalendar":{"previousMonth":"上个月","nextMonth":"下个月","startDate":"起始日期","endDate":"结束日期","rangeSeparator":"至","monthTitle":"{year}-{month}","weekdaySun":"日","weekdayMon":"一","weekdayTue":"二","weekdayWed":"三","weekdayThu":"四","weekdayFri":"五","weekdaySat":"六"},"sysStatus":{"systemOverview":"系统运行概览","healthHealthy":"运行正常","healthChecking":"正在检查","healthAttention":"状态读取异常","greetingMorning":"早上好,欢迎回来","greetingNoon":"中午好,保持好状态","greetingAfternoon":"下午好,工作顺利","greetingEvening":"晚上好,辛苦了","greetingLateNight":"夜深了,注意休息","summaryChecking":"正在连接系统服务并读取最新的索引信息…","summaryUnavailable":"暂时无法读取系统状态,请检查网络连接或稍后刷新页面。","summaryEmpty":"系统响应正常,索引服务已就绪,正在等待首个文件上传。","summaryIndexed":"系统响应正常,当前已索引 {files} 个文件。","summaryHealthy":"系统响应正常,当前已索引 {files} 个文件,覆盖 {channels} 个上传渠道。","localTime":"本地时间","localTimezone":"本地时区","totalFiles":"文件总数","clickToRefresh":"点击刷新","indexUpdateTime":"索引更新时间","systemVersion":"系统版本","clickToViewChangelog":"点击查看更新日志","channelDistribution":"上传渠道分布","fileStatusDistribution":"文件状态分布","uploadTrend":"上传趋势","uploadTrendGroupBy":"上传趋势分组方式","totalUploads":"上传总数","byChannelType":"渠道类型","byChannelName":"渠道名称","selectDateRange":"选择日期范围","otherChannels":"其他","uploadsUnit":"次","noData":"暂无数据","totalFilesLabel":"文件总数","statusTypes":"状态类型","systemMaintenance":"系统维护","rebuildIndex":"重建索引","rebuilding":"重建中...","rebuildTooltip":"重新扫描所有文件并更新索引数据,适用于数据不一致时的修复","backupData":"备份数据","backingUp":"备份中...","backupTooltip":"备份所有文件元数据和系统设置到JSON文件","restoreData":"恢复数据","restoring":"恢复中...","restoreTooltip":"从备份文件恢复数据,将覆盖现有的文件元数据和系统设置","cancelOperation":"取消操作","retry":"重试","close":"关闭","records":"条记录","aboutToComplete":"即将完成","seconds":"约 {count} 秒","minutes":"约 {count} 分钟","hoursMinutes":"约 {hours} 小时 {minutes} 分钟","phaseFetching":"正在获取数据","phaseSorting":"正在排序","phaseUploading":"正在上传","phaseFinalizing":"正在完成","phaseBuilding":"正在构建备份","phaseDownloading":"正在生成下载","phaseRestoringFiles":"正在恢复文件","phaseRestoringSettings":"正在恢复设置","phaseCompleted":"已完成","phaseRetrying":"正在重试","rebuildSuccess":"索引重建完成!共处理 {count} 个文件","backupSuccess":"备份完成!共备份 {count} 个文件","backupSuccessWithSettings":"备份完成!共备份 {fileCount} 个文件,{settingsCount} 个设置项","operationInProgress":"已有操作正在进行中","selectJsonFile":"请选择JSON格式的备份文件","restoreConfirmMessage":"恢复操作将覆盖现有的文件元数据和系统设置,此操作不可逆。确定要继续吗?","restoreConfirmTitle":"确认恢复","restoreConfirmOk":"确定恢复","restoreConfirmCancel":"取消","invalidBackupFile":"备份文件格式无效,请选择有效的 JSON 文件","restoreSuccess":"恢复完成!已恢复 {files} 个文件和 {settings} 个设置项,正在重建索引...","restoreFailed":"恢复数据失败","fetchIndexFailed":"获取索引信息失败","unknown":"未知","blocked":"已屏蔽","normalStatus":"正常","latestUpload":"最近上传","earliestUpload":"最早上传","daysAgo":"{count}天前","hoursAgo":"{count}小时前","minutesAgo":"{count}分钟前","justNow":"刚刚","cancellingRebuild":"正在取消索引重建..."},"sysUpload":{"title":"上传渠道管理","titleTooltip":"管理所有上传渠道的配置,点击卡片查看详情或编辑","filterPlaceholder":"筛选渠道类型","addChannel":"添加渠道","loadBalance":"负载均衡","unnamedChannel":"未命名渠道","envVariable":"环境变量","noChannels":"暂无 {type} 渠道","detail":"详情","editBtn":"编辑","deleteBtn":"删除","addDialogTitle":"添加新渠道","channelTypeLabel":"渠道类型","channelTypePlaceholder":"请选择渠道类型","channelNameLabel":"渠道名称","channelNamePlaceholder":"请输入渠道名称","channelNameImmutableTip":"添加后将作为文件关联渠道的唯一标识,不支持修改","channelNameEditDisabledTip":"渠道名称用于关联已上传文件,不支持修改","botTokenLabel":"Bot Token","botTokenPlaceholder":"请输入 Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"请输入 Chat ID","proxyDomain":"代理域名","proxyDomainPlaceholder":"可选,例如: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"例如: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN 域名","cdnDomainPlaceholder":"可选,请填写完整 CDN 访问地址前缀,例如:https://cdn.example.com","cdnDomainTip":"可选配置。可用于生成和展示文件访问链接,服务端读取文件内容时也会优先尝试通过 CDN 读取。","bucketName":"存储桶名称","bucketNamePlaceholder":"请输入存储桶名称","bucketRegion":"存储桶区域","bucketRegionPlaceholder":"默认填写 auto","accessKeyId":"访问密钥 ID","accessKeyIdPlaceholder":"请输入访问密钥 ID","secretAccessKey":"机密访问密钥","secretAccessKeyPlaceholder":"请输入机密访问密钥","pathStyle":"路径风格","pathStyleTip":"使用 OpenList 等不兼容主机风格服务时需开启","quotaLimit":"容量限制","quotaLimitGB":"容量上限 (GB)","quotaThreshold":"停用阈值 (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"请输入 Channel ID","nitroMember":"Nitro 会员","nitroTip":"会员单文件限制 25MB,否则为 10MB","discordWarning":"Discord 有接口频率限制,不建议将其用作大规模并发场景","repoName":"仓库名","repoNamePlaceholder":"格式: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"请输入 Access Token","privateRepo":"私有仓库","privateRepoTip":"私有仓库限制 100GB","webdavBaseUrl":"WebDAV 基础地址","webdavBaseUrlPlaceholder":"例如: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"用户名","webdavUsernamePlaceholder":"可选用户名","webdavPassword":"密码","webdavPasswordPlaceholder":"可选密码","webdavPublicUrlPlaceholder":"可选,请填写完整公开访问地址前缀,例如:https://cdn.example.com/imgbed","webdavPublicUrlTip":"可选配置。服务端读取文件内容时会优先尝试通过该公开地址读取,失败后回退 WebDAV API。","webdavHeaders":"自定义请求头","webdavHeadersPlaceholder":"可选 JSON 对象,例如: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"自定义请求头必须是有效的 JSON 对象","webdavCreateDirectory":"自动创建目录","webdavCreateDirectoryTip":"上传文件前自动创建父级目录","cancel":"取消","confirmAdd":"确认添加","detailDialogTitle":"渠道详情 - {name}","channelNameDetail":"渠道名称","channelTypeDetail":"渠道类型","statusLabel":"状态","enabled":"已启用","disabled":"已禁用","configSource":"配置来源","publicUrl":"公开访问链接","notSet":"未设置","isPathStyle":"是","isNotPathStyle":"否","currentUsage":"当前用量","closeBtn":"关闭","editDialogTitle":"编辑渠道 - {name}","enableChannel":"启用渠道","saveChanges":"保存修改","r2ConfigNote":"请按照
配置 R2 渠道 文档说明添加 R2 渠道","reservedName":"该名称为系统保留名称,请使用其他名称","duplicateName":"该类型下已存在同名渠道,请使用其他名称","fixedChannelCannotDelete":"环境变量配置的渠道无法删除","deleteChannelConfirm":"确定要删除该渠道吗?删除后,仍关联该渠道的文件可能无法访问。","quotaInitConfirm":"首次启用容量限制需要统计现有文件容量,这可能需要一些时间。是否立即统计?","quotaInitTitle":"初始化容量统计","quotaInitConfirmBtn":"立即统计","quotaInitCancelBtn":"稍后手动统计","quotaInitLater":"您可以稍后点击刷新按钮手动统计","quotaCalculating":"正在统计容量,请稍候...","quotaCalculateSuccess":"容量统计完成","quotaCalculateFailed":"统计失败","quotaCalculateError":"统计失败: "},"sysSecurity":{"authManagement":"认证管理","userAuth":"用户端认证","adminAuth":"管理端认证","uploadPassword":"上传密码","confirmPassword":"确认密码","adminUsername":"用户名","adminPassword":"密码","apiTokenManagement":"API Token 管理","imageReview":"图像审查","imageReviewTooltip":"仅对非分块上传文件生效,支持 nsfwjs 和 moderatecontent.com 渠道","enableReview":"开启审查","reviewChannel":"审查渠道","reviewChannelPlaceholder":"请选择审查渠道","apiKey":"API Key","apiPath":"API 路径","ipQuery":"IP 归属地查询","ipQueryTooltip":"上传时按配置调用自定义 API 查询上传 IP 归属地,参数值支持 {\'{ip}\'} 占位符","enableIpQuery":"开启查询","ipQueryChannel":"查询渠道","ipQueryChannelPlaceholder":"请选择查询渠道","customApi":"自定义 API","queryParams":"查询参数","paramNamePlaceholder":"参数名","paramValuePlaceholder":"参数值,如 {\'{ip}\'}","addQueryParam":"添加参数","responseFields":"响应字段","responseFieldsTip":"最终显示内容会按照字段顺序拼接","responseFieldPathPlaceholder":"JSON 路径,如 country.name","addResponseField":"添加字段","uploadManagement":"上传管理","accessManagement":"访问管理","domainFilter":"域名过滤","allowedDomains":"放行域名","allowedDomainsTooltip":"1.针对访问域名设置权限
2.留空默认全部放行,多个域名请用英文逗号分隔","whiteListMode":"白名单模式","enableWhiteList":"是否开启","enableWhiteListTooltip":"1.针对文件设置权限
2.开启后,仅被加入白名单的文件可被访问","imageTransform":"图片尺寸处理","enableImageTransform":"是否开启","enableImageTransformTooltip":"开启后,读取文件接口可通过 width、height 和 fit 参数处理图片尺寸","imageTransformAllowedSizes":"允许尺寸","imageTransformAllowedSizesPlaceholder":"例如 320xauto,640xauto,1280x720","imageTransformAllowedSizesHint":"留空允许任意合法尺寸
多个尺寸用英文逗号分隔,单边未限制时填写 auto","imageTransformAllowedSizesInvalid":"尺寸格式无效,请使用 320xauto、autox480 或 1280x720,单边最大 4096","settingsSaved":"设置已保存","tokenName":"名称","tokenValue":"Token","permissions":"权限","createdAt":"创建时间","status":"状态","expiresAt":"过期时间","operation":"操作","editBtn":"编辑","deleteBtn":"删除","permUpload":"上传","permDelete":"删除","permList":"列出","permManage":"管理","createTokenTitle":"创建新 API Token","tokenNameLabel":"Token 名称","tokenNamePlaceholder":"请输入Token名称","permissionsLabel":"权限","neverExpire":"永不过期","validPeriod":"有效期","autoDeleteOnExpire":"过期自动删除","createBtn":"创建","editTokenTitle":"编辑 API Token","updateBtn":"更新","tokenCreatedTitle":"Token 创建成功","tokenCreatedWarning":"请妥善保存以下Token,关闭此窗口后将无法再次查看完整Token!","fullToken":"完整Token","copyBtn":"复制","savedBtn":"我已保存","tokenCopied":"Token已复制到剪贴板","copyFailed":"复制失败,请手动复制","tokenCreateSuccess":"Token创建成功","tokenCreateFailed":"Token创建失败","tokenUpdateSuccess":"Token更新成功","tokenUpdateFailed":"Token更新失败","tokenDeleteConfirm":"此操作将永久删除该Token,是否继续?","tokenDeleteConfirmTitle":"提示","tokenDeleteConfirmOk":"确定","tokenDeleteConfirmCancel":"取消","tokenDeleteSuccess":"Token删除成功","tokenDeleteFailed":"Token删除失败","tokenListFailed":"获取Token列表失败","passwordUrlReserved":"密码不能包含部分URL保留字符: % & ? # /","confirmUploadPassword":"请再次输入上传密码","confirmAdminPassword":"请再次输入管理密码","passwordMismatch":"两次输入密码不一致","passwordUnchanged":"未修改(留空保持原密码)","adminPasswordChangedRelogin":"管理端密码已修改,即将跳转到登录页","clearPassword":"清除认证信息","tokenNameRequired":"请输入Token名称","permissionsRequired":"请选择权限","validPeriodRequired":"有效期数值必须大于 0","timeUnitSeconds":"秒","timeUnitMinutes":"分钟","timeUnitHours":"小时","timeUnitDays":"天","timeUnitMonths":"月","timeUnitYears":"年","sessionSecurityPolicy":"会话安全策略","secureMode":"Secure 模式","secureModeTooltip":"开启后,Cookie 仅通过 HTTPS 连接传输,请确保您的站点已启用 HTTPS","userSessionMaxAge":"用户端会话有效期","adminSessionMaxAge":"管理端会话有效期","sessionMaxAgeUnit":"天","sessionMaxAgeInvalid":"会话有效期必须为 1-3650 的正整数"},"sysPage":{"settingsSaved":"设置已保存","refreshAnnouncement":"刷新公告已读状态","otherSettings":"其他设置","channelSelectPlaceholder":"请先选择上传渠道"},"sysOthers":{"remoteTelemetry":"远端遥测","remoteTelemetryTooltip":"便于问题查找和定位,建议开启","enable":"启用","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"设置后可以使后端拉黑、删除等操作不受CDN缓存限制
建议设置,设置方式请查阅文档","zoneId":"区域ID","accountEmail":"账户邮箱","randomImageApi":"随机图像API","randomImageApiTooltip":"API具体用法请查阅文档","directory":"目录","directoryTooltip":"1. 开放随机图权限的目录,默认为根目录,多个目录用逗号分隔
2. 目录均采用绝对路径,例如/img/cover,表示该目录及其所有子目录的文件可被随机图API访问","publicBrowse":"访客图库","publicBrowseTooltip":"启用后,访客可通过 /browse 路径浏览指定目录的图片(只读,无法删除/移动)","openDirectory":"开放目录","openDirectoryTooltip":"

允许公开浏览的目录,多个目录用逗号分隔

示例:wallpaper,photos,album

支持子目录:2026/lucky,2026/rich

访问链接:https://你的域名/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"启用后,可以通过WebDAV协议访问和管理图片","webdavUsername":"用户名","webdavPassword":"密码","webdavUploadChannel":"上传渠道","webdavDefaultChannel":"默认渠道","webdavChannelName":"指定渠道名","settingsSaved":"设置已保存"},"customerConfig":{"uploadFileList":"上传文件列表","fileNameCol":"文件名","filePreview":"文件预览","uploadTimeCol":"上传时间","ipAddress":"IP地址","address":"地址","uploadCount":"上传次数","allowUpload":"允许上传","allow":"允许","deny":"禁止","loadMore":"加载更多","loadError":"加载更多数据时出错,请检查网络连接","syncError":"同步数据时出错,请检查网络连接"},"publicBrowse":{"searchPlaceholder":"搜索文件名 或 #页码","fileCount":"{count} 个文件","loading":"加载中...","retry":"重试","creditText":"该图库由林酱贡献代码","loadingMore":"加载中...","allLoaded":"已加载全部","creditLink":"林酱贡献","browseDisabled":"公开浏览功能未启用","directoryNotAllowed":"该目录不允许公开访问","accessDenied":"访问被拒绝","loadFailed":"加载失败,请重试","rootDirectory":"根目录","copyLink":"复制链接","copied":"已复制","downloadBtn":"下载","swipeHint":"← 滑动切换 →","rotate90":"旋转90°"},"transformMedia":{"download":"下载","playbackSpeed":"播放速度","normalSpeed":"正常","playMode":"播放模式","stopAfterPlay":"播完停止","sequentialPlay":"顺序播放","loopSingle":"单曲循环","more":"更多"},"directoryTree":{"selectDirectory":"选择目录","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadFailed":"加载目录树失败,请检查网络连接"},"floatingSave":{"saving":"保存中","save":"保存"},"theme":{"lightMode":"浅色模式","darkMode":"深色模式","autoMode":"自动模式"},"common":{"confirm":"确定","cancel":"取消","close":"关闭","save":"保存","delete":"删除","edit":"编辑","copy":"复制","download":"下载","retry":"重试","loading":"加载中...","success":"成功","failed":"失败","warning":"警告","info":"提示","yes":"是","no":"否","all":"全部类型","select":"请选择"},"validation":{"pathMustStartWithSlash":"目标目录必须以 \\"/\\" 开头","pathTraversalNotAllowed":"目标目录不能包含路径穿越字符 \\"..\\"","singleDotNotAllowed":"目标目录不能包含单独的 \\".\\" 路径段","consecutiveSlashNotAllowed":"目标目录不能包含连续的斜杠","invalidCharacters":"目标目录包含非法字符,请使用合法的路径格式","uploadDirReplace":"上传目录"},"language":{"switchTo":"中/En","switchLanguage":"切换语言"},"whitelist":{"title":"白名单模式已启用","description":"抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。","goHome":"返回首页","goBack":"返回上页","helpText":"您可以尝试:","uploadImage":"图片上传","refreshPage":"刷新页面"}}'),l=JSON.parse('{"login":{"title":"Login to {owner} ImgHub","adminTitle":"Admin Login","password":"Password","username":"Username","passwordPlaceholder":"Enter auth code","usernamePlaceholder":"Enter username","adminPasswordPlaceholder":"Enter password","submit":"Login","success":"Login successful","failed":"Login failed, please check your password","adminFailed":"Invalid username or password","serverError":"Server error","systemError":"System error","authRequired":"Please authenticate first!","authFailed":"Authentication failed!"},"upload":{"folderPlaceholder":"Upload directory","pasteUpload":"Paste Upload","fileUpload":"File Upload","selectFolderUpload":"Choose a folder to upload","dragUploadText":"Drag Click or {pasteShortcut} to paste upload","pasteUrlPlaceholder":"Paste external links, separate multiple links with line breaks","pasteUploadBtn":"Upload","pasteSave":"Save","pasteExternal":"External","history":"Upload History","announcement":"Announcements","noAnnouncement":"No announcements","announcementTitle":"Announcement","announcementAck":"Got it!","settings":"Upload Settings","linkFormat":"Link Format","manage":"Management","logout":"Logout","logoutSuccess":"Logged out","viewDocs":"Documentation","switchUploadMethod":"Switch Upload Method","copyAll":"Copy All","retryFailed":"Retry Failed","clearList":"Clear List","clearAll":"Clear All","clearUploaded":"Clear Uploaded"},"uploadForm":{"deleted":"{name} deleted","uploadSuccess":"{name} uploaded successfully","uploadFailed":"{name} upload failed","compressFailedCannotUpload":"{name} compression failed, cannot upload!","fileTooLarge":"{name} file too large, cannot upload!","compressedFileTooLarge":"{name} still too large after compression, cannot upload!","copySuccess":"Copied successfully","copyFailed":"Copy failed","copyAllSuccess":"All copied successfully","fileNotUploaded":"File not uploaded, cannot copy link","fileListCleared":"File list cleared","fileListEmpty":"File list is empty","successFilesCleared":"Uploaded files cleared","successFilesEmpty":"No uploaded files","noFailedFiles":"No failed files","autoRetryOn":"Auto retry enabled","autoRetryOff":"Auto retry disabled","autoRetry":"Auto Retry","maxRetryReached":"{name} reached max retry limit ({max}), stopping","urlRequestFailed":"URL request from clipboard failed","chunkMerging":"Chunk upload complete, merging file, please wait...","fileSizeTooLarge":"File too large","chunkInitFailed":"Failed to init chunked upload","uploadError":"Upload error occurred","imageLoadFailed":"Image load failed"},"uploadSettings":{"title":"Upload Settings","uploadChannel":"Upload Channel","channelType":"Channel Type","allChannels":"All Channels","configuredChannelsOnly":"Configured Only","noConfiguredChannels":"No configured channels","channelName":"Channel Name","channelNameTooltip":"Select a specific channel name. If not selected, load balancing or default channel will be used","autoSelect":"Auto Select","uploadDirectory":"Upload Directory","uploadDirectoryPlaceholder":"Enter upload directory path","autoSwitch":"Auto Switch","autoSwitchTooltip":"For non-chunked uploads, automatically switch to another channel on failure","fileNaming":"File Naming","namingDefault":"Default","namingIndex":"Prefix Only","namingOrigin":"Original Name","namingShort":"Short Link","filePreprocess":"File Preprocessing","filePreprocessTooltip":"Convert format and compress locally before upload, only applies to image files","convertToWebp":"Convert to WebP","convertToWebpTooltip":"Convert images to WebP format before upload to reduce file size. Falls back to original format on failure","fileCompress":"File Compression","compressThreshold":"Compression Threshold","compressThresholdTooltip":"Set image size threshold, files exceeding this will be auto-compressed (MB)","expectedSize":"Expected Size","expectedSizeTooltip":"Set expected image size after compression (MB)","serverCompress":"Server-side Compression","serverCompressTooltip":"1. Compress on Telegram side, only applies to image files uploaded via Telegram channel
2. If image size (after local compression) exceeds 10MB, this setting is ignored
3. For high-resolution, transparent background images, it\'s recommended to disable server compression to avoid issues","enableCompress":"Enable Compression","confirm":"OK"},"uploadHistory":{"title":"History","totalRecords":"{count} records","switchView":"Switch View","clearRecords":"Clear Records","loading":"Loading...","pullToLoadMore":"Pull to load more","noMoreRecords":"No more records","emptyHistory":"No upload history","linkCopied":"Link copied","copyFailed":"Copy failed","clearConfirmTitle":"Notice","clearConfirmMessage":"Are you sure you want to clear all upload records?","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","recordsCleared":"Records cleared","deleteConfirmMessage":"Are you sure you want to delete this record?","recordDeleted":"Record deleted"},"settings":{"linkFormatTitle":"Link Format Settings","defaultCopyLink":"Default Copy Format","rawLink":"Raw Link","customLink":"Custom Link","customLinkTooltip":"Default link is https://your.domain/file/xxx.jpg
If custom link format is enabled, only the xxx.jpg part is kept, please enter the rest manually","enableCustom":"Enable Custom","customPrefix":"Custom Prefix","customPrefixPlaceholder":"Enter custom link prefix","confirm":"OK","s3Link":"S3 Link"},"dashboard":{"searchPlaceholder":"Search: #tag -#exclude","sortAsc":"Ascending","sortDesc":"Descending","sortByTime":"Time","sortBySize":"Size","sortByRawName":"File ID","sortByFileName":"File Name","selectedItems":"selected","clearSelection":"Clear selection","copy":"Copy","delete":"Delete","download":"Download","move":"Move","tagManagement":"Tag Management","addToBlacklist":"Add to Blacklist","addToWhitelist":"Add to Whitelist","linkFormat":"Link Format","listView":"List View","cardView":"Card View","logout":"Logout","rootDirectory":"Root","totalFiles":"{count} files","noMatchingFiles":"No matching files or folders found","currentDirEmpty":"Current directory is empty","adjustSearchHint":"Try adjusting search criteria or filters","uploadHint":"Uploaded files will appear here","loadMore":"Load More","totalPages":"{count} pages","jumpTo":"Go to","preview":"Preview","fileName":"File Name","tags":"Tags","channelType":"Channel Type","channelNameCol":"Channel Name","uploadAddress":"Upload Address","fileSize":"Size","uploadTime":"Upload Time","actions":"Actions","externalTag":"External","unknownTag":"Unknown","detail":"Detail","copyLink":"Copy Link","moveFile":"Move","downloadFile":"Download","loadFailed":"Load failed","copySuccess":"Copied successfully","copyFailed":"Copy failed","deleteConfirm":"This will permanently delete this file. Continue?","deleteConfirmTitle":"Notice","deleteConfirmOk":"OK","deleteConfirmCancel":"Cancel","deleteSuccess":"Deleted successfully","deleteFailed":"Delete failed","blockConfirm":"This will add the file to blacklist. Continue?","blockSuccess":"Added to blacklist successfully","blockFailed":"Failed to add to blacklist","whiteConfirm":"This will add the file to whitelist. Continue?","whiteSuccess":"Added to whitelist successfully","whiteFailed":"Failed to add to whitelist","deleteFolderConfirm":"This will permanently delete this folder. Continue?","deleteFileConfirm":"This will permanently delete this file. Continue?","batchDeleteConfirm":"This will permanently delete selected files and folders. Continue?","batchDeleteSuccess":"Batch delete successful","batchDeleteFailed":"Batch delete failed","batchBlockConfirm":"This will add selected files to blacklist. Continue?","batchBlockSuccess":"Batch blacklist successful","batchBlockFailed":"Batch blacklist failed","batchWhiteConfirm":"This will add selected files to whitelist. Continue?","batchWhiteSuccess":"Batch whitelist successful","batchWhiteFailed":"Batch whitelist failed","noLinksAvailable":"No links to copy","batchCopySuccess":"Copied {count} links successfully","batchCopyFailed":"Batch copy failed, please retry","batchCopyLinksSuccess":"Batch copy successful","copyFileLinkSuccess":"File link copied","fileListMemoryCacheWarning":"The file list is large, so it is being kept in memory. Refreshing the page will require loading it again.","indexingWarning":"The index is still building, so current search and sort results may be inaccurate. Please try again later.","loadMoreFailed":"Failed to load more files, please check network","moveSuccess":"Moved successfully","moveFailed":"Move failed","moveTargetSameAsCurrent":"Target folder cannot be the current folder","invalidPageNumber":"Please enter a valid page number","pageExceedsMax":"Page number cannot exceed {max}","loadingData":"Loading data, please wait...","loadDataFailed":"Failed to load data, please check network","fetchFileListFailed":"Failed to fetch file list","refreshFailed":"Refresh failed, please retry","selectFilesFirst":"Please select files first","syncDataError":"Error syncing data, please check network","fetchingFileList":"Fetching file list...","folderEmptyNoLinks":"Folder is empty, no links to copy","copiedFileLinks":"Copied {count} file links","copyFolderLinksFailed":"Failed to copy folder links, please retry"},"dashboardTabs":{"fileManagement":"File Management","userManagement":"User Management","systemSettings":"System Settings","fileUpload":"File Upload"},"fileDetail":{"title":"File Details","download":"Download","tags":"Tags","blacklist":"Blacklist","whitelist":"Whitelist","deleteBtn":"Delete","edit":"Edit","rename":"Rename","save":"Save","cancel":"Cancel","originUrl":"Original Link","fileNameLabel":"File Name","fileNamePlaceholder":"Enter file name","fileType":"File Type","fileTypePlaceholder":"e.g. image/jpeg","fileSizeLabel":"File Size","imageDimensions":"Dimensions","noDimensions":"N/A","uploadTimeLabel":"Upload Time","channelTypeAndName":"Channel Type/Name","accessStatusAndReview":"Access Status/Review","uploadIP":"Upload IP","uploadAddressLabel":"Upload Address","fileTags":"File Tags","noTags":"No tags","unknown":"Unknown","accessNormal":"Normal","accessNormalWhitelist":"Normal (Whitelisted)","accessBlockedBlacklist":"Blocked (Blacklisted)","accessBlockedReview":"Blocked (Review rejected)","orientationLandscape":"Landscape","orientationPortrait":"Portrait","orientationSquare":"Square","linkCopied":"Link copied","metadataSaved":"Metadata saved successfully","metadataSaveFailed":"Failed to save metadata","renameTitle":"Rename File ID","renameLabel":"New File ID","renamePlaceholder":"Enter new File ID","renameCancel":"Cancel","renameConfirm":"Confirm Rename","renameSuccess":"File renamed successfully","renameConflict":"Target file name already exists","renameFailed":"Rename failed"},"filter":{"accessStatus":"Access Status","normal":"Normal","blocked":"Blocked","blackWhiteList":"Black/White List","whiteList":"Whitelist","blackList":"Blacklist","notSet":"Not Set","reviewResult":"Review Result","teenContent":"12+ Content","adultContent":"Adult Content","fileType":"File Type","image":"Image","video":"Video","audio":"Audio","other":"Other","channelType":"Channel Type","externalLink":"External Link","channelName":"Channel Name","clearFilters":"Clear Filters"},"moveFile":{"title":"Move File","batchTitle":"Batch Move Files","targetDirectory":"Target Directory","targetPlaceholder":"Enter target directory path","hint":"Tip: Paths starting with / indicate root directory, e.g. /photos/2024/","hintMobile":"Tip: Paths starting with / indicate root directory","selectDirectory":"Select Directory","cancel":"Cancel","confirm":"OK","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadTreeFailed":"Failed to load directory tree, please check network connection"},"batchTag":{"title":"Batch Tag Management","addTab":"Add","removeTab":"Remove","clearTab":"Clear","addDescription":"Add tags to {count} selected files","inputPlaceholder":"Enter tag name","pendingTags":"Tags to add","noPendingTags":"No tags to add","addToAllFiles":"Add to all files","removeDescription":"Remove common tags from selected files","commonTags":"Common Tags","noCommonTags":"Selected files have no common tags","clearDescription":"Clear all tags from {count} selected files","clearWarningTitle":"⚠️Warning","clearWarningDesc":"This will clear all tags from selected files and cannot be undone","confirmClearAll":"Confirm clear all tags","tagAlreadyInList":"Tag already in list","pleaseAddTags":"Please add tags first","addSuccess":"Tags added to {count} files successfully","addFailed":"Batch tag addition failed","removeSuccess":"Tags removed from {count} files successfully","removeFailed":"Tag removal failed","clearConfirmMessage":"Are you sure you want to clear all tags from {count} selected files? This cannot be undone.","clearConfirmTitle":"Confirm Clear","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","clearCancelled":"Clear operation cancelled","clearSuccess":"Tags cleared from {count} files successfully","clearFailed":"Failed to clear tags","loadCommonTagsFailed":"Failed to load common tags"},"tagManagement":{"title":"Tag Management","inputPlaceholder":"Enter tag name","currentTags":"Current Tags","noTags":"No tags","popularTags":"Popular Tags","loading":"Loading...","noPopularTags":"No popular tags","close":"Close","tagExists":"Tag already exists","addSuccess":"Tag added successfully","addFailed":"Failed to add tag","removeSuccess":"Tag removed successfully","removeFailed":"Failed to remove tag","loadFailed":"Failed to load tags"},"mobileAction":{"viewDetail":"View Details","copyLink":"Copy Link","downloadFile":"Download File","moveFile":"Move File","tagManagement":"Tag Management","moveFolder":"Move Folder","deleteFile":"Delete File","deleteFolder":"Delete Folder"},"mobileDirectory":{"title":"Directory Navigation","rootDirectory":"Root","goBack":"Go Back"},"sysConfig":{"logout":"Logout"},"sysConfigTabs":{"systemStatus":"System Status","uploadSettings":"Upload Settings","securitySettings":"Security Settings","pageSettings":"Page Settings","otherSettings":"Other Settings"},"dateRangeCalendar":{"previousMonth":"Previous month","nextMonth":"Next month","startDate":"Start date","endDate":"End date","rangeSeparator":"to","monthTitle":"{year}-{month}","weekdaySun":"Sun","weekdayMon":"Mon","weekdayTue":"Tue","weekdayWed":"Wed","weekdayThu":"Thu","weekdayFri":"Fri","weekdaySat":"Sat"},"sysStatus":{"systemOverview":"System runtime overview","healthHealthy":"Running normally","healthChecking":"Checking status","healthAttention":"Status unavailable","greetingMorning":"Good morning, welcome back","greetingNoon":"Good afternoon, stay in the flow","greetingAfternoon":"Good afternoon, hope work goes smoothly","greetingEvening":"Good evening, thanks for your work today","greetingLateNight":"It\'s late, remember to take a break","summaryChecking":"Connecting to system services and reading the latest index information…","summaryUnavailable":"System status is temporarily unavailable. Check the connection or refresh again later.","summaryEmpty":"The system is responding normally and the index service is ready for the first upload.","summaryIndexed":"The system is responding normally with {files} indexed files.","summaryHealthy":"The system is responding normally with {files} indexed files across {channels} upload channels.","localTime":"Local Time","localTimezone":"Local timezone","totalFiles":"Total Files","clickToRefresh":"Click to refresh","indexUpdateTime":"Index Update Time","systemVersion":"System Version","clickToViewChangelog":"Click to view changelog","channelDistribution":"Upload Channel Distribution","fileStatusDistribution":"File Status Distribution","uploadTrend":"Upload Trend","uploadTrendGroupBy":"Upload trend group by","totalUploads":"Total Uploads","byChannelType":"Channel Type","byChannelName":"Channel Name","selectDateRange":"Select date range","otherChannels":"Other","uploadsUnit":"uploads","noData":"No data","totalFilesLabel":"Total Files","statusTypes":"Status Types","systemMaintenance":"System Maintenance","rebuildIndex":"Rebuild Index","rebuilding":"Rebuilding...","rebuildTooltip":"Rescan all files and update index data, useful for fixing data inconsistencies","backupData":"Backup Data","backingUp":"Backing up...","backupTooltip":"Backup all file metadata and system settings to a JSON file","restoreData":"Restore Data","restoring":"Restoring...","restoreTooltip":"Restore data from a backup file, this will overwrite existing file metadata and system settings","cancelOperation":"Cancel Operation","retry":"Retry","close":"Close","records":"records","aboutToComplete":"Almost done","seconds":"~{count} seconds","minutes":"~{count} minutes","hoursMinutes":"~{hours} hours {minutes} minutes","phaseFetching":"Fetching data","phaseSorting":"Sorting","phaseUploading":"Uploading","phaseFinalizing":"Finalizing","phaseBuilding":"Building backup","phaseDownloading":"Generating download","phaseRestoringFiles":"Restoring files","phaseRestoringSettings":"Restoring settings","phaseCompleted":"Completed","phaseRetrying":"Retrying","rebuildSuccess":"Index rebuild complete! Processed {count} files","backupSuccess":"Backup complete! Backed up {count} files","backupSuccessWithSettings":"Backup complete! Backed up {fileCount} files and {settingsCount} settings","operationInProgress":"An operation is already in progress","selectJsonFile":"Please select a JSON backup file","restoreConfirmMessage":"Restoring will overwrite existing file metadata and system settings. This cannot be undone. Continue?","restoreConfirmTitle":"Confirm Restore","restoreConfirmOk":"Confirm Restore","restoreConfirmCancel":"Cancel","invalidBackupFile":"Invalid backup file format, please select a valid JSON file","restoreSuccess":"Restore complete! Restored {files} files and {settings} settings, rebuilding index...","restoreFailed":"Failed to restore data","fetchIndexFailed":"Failed to fetch index information","unknown":"Unknown","blocked":"Blocked","normalStatus":"Normal","latestUpload":"Latest Upload","earliestUpload":"Earliest Upload","daysAgo":"{count} days ago","hoursAgo":"{count} hours ago","minutesAgo":"{count} minutes ago","justNow":"Just now","cancellingRebuild":"Cancelling index rebuild..."},"sysUpload":{"title":"Upload Channel Management","titleTooltip":"Manage all upload channel configurations. Click a card to view details or edit","filterPlaceholder":"Filter channel type","addChannel":"Add Channel","loadBalance":"Load Balance","unnamedChannel":"Unnamed Channel","envVariable":"Environment Variable","noChannels":"No {type} channels","detail":"Detail","editBtn":"Edit","deleteBtn":"Delete","addDialogTitle":"Add New Channel","channelTypeLabel":"Channel Type","channelTypePlaceholder":"Select channel type","channelNameLabel":"Channel Name","channelNamePlaceholder":"Enter channel name","channelNameImmutableTip":"After creation, this becomes the unique identifier for files associated with the channel and cannot be changed","channelNameEditDisabledTip":"The channel name links uploaded files to this channel and cannot be changed","botTokenLabel":"Bot Token","botTokenPlaceholder":"Enter Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"Enter Chat ID","proxyDomain":"Proxy Domain","proxyDomainPlaceholder":"Optional, e.g.: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"e.g.: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN Domain","cdnDomainPlaceholder":"Optional. Enter the full CDN URL prefix, e.g. https://cdn.example.com","cdnDomainTip":"Optional. Can be used to generate and display file access links. Server-side file reads also try the CDN first.","bucketName":"Bucket Name","bucketNamePlaceholder":"Enter bucket name","bucketRegion":"Bucket Region","bucketRegionPlaceholder":"Default: auto","accessKeyId":"Access Key ID","accessKeyIdPlaceholder":"Enter Access Key ID","secretAccessKey":"Secret Access Key","secretAccessKeyPlaceholder":"Enter Secret Access Key","pathStyle":"Path Style","pathStyleTip":"Enable when using services incompatible with host-style like OpenList","quotaLimit":"Quota Limit","quotaLimitGB":"Quota Limit (GB)","quotaThreshold":"Disable Threshold (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"Enter Channel ID","nitroMember":"Nitro Member","nitroTip":"Nitro members: 25MB per file, otherwise 10MB","discordWarning":"Discord has API rate limits, not recommended for high-concurrency scenarios","repoName":"Repository Name","repoNamePlaceholder":"Format: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"Enter Access Token","privateRepo":"Private Repository","privateRepoTip":"Private repository limit: 100GB","webdavBaseUrl":"WebDAV Base URL","webdavBaseUrlPlaceholder":"e.g.: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"Username","webdavUsernamePlaceholder":"Optional username","webdavPassword":"Password","webdavPasswordPlaceholder":"Optional password","webdavPublicUrlPlaceholder":"Optional. Enter the full public URL prefix, e.g. https://cdn.example.com/imgbed","webdavPublicUrlTip":"Optional. Server-side file reads try this public URL first and fall back to the WebDAV API on failure.","webdavHeaders":"Custom Headers","webdavHeadersPlaceholder":"Optional JSON object, e.g.: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"Custom headers must be a valid JSON object","webdavCreateDirectory":"Auto Create Directories","webdavCreateDirectoryTip":"Create parent directories before uploading files","cancel":"Cancel","confirmAdd":"Confirm Add","detailDialogTitle":"Channel Details - {name}","channelNameDetail":"Channel Name","channelTypeDetail":"Channel Type","statusLabel":"Status","enabled":"Enabled","disabled":"Disabled","configSource":"Config Source","publicUrl":"Public Access URL","notSet":"Not Set","isPathStyle":"Yes","isNotPathStyle":"No","currentUsage":"Current Usage","closeBtn":"Close","editDialogTitle":"Edit Channel - {name}","enableChannel":"Enable Channel","saveChanges":"Save Changes","r2ConfigNote":"Please follow the R2 Channel Configuration documentation to add R2 channels","reservedName":"This name is reserved by the system, please use another name","duplicateName":"A channel with this name already exists, please use another name","fixedChannelCannotDelete":"Channels configured via environment variables cannot be deleted","deleteChannelConfirm":"Are you sure you want to delete this channel? Files still associated with it may become inaccessible.","quotaInitConfirm":"First time enabling quota requires calculating existing file sizes, this may take some time. Calculate now?","quotaInitTitle":"Initialize Quota Statistics","quotaInitConfirmBtn":"Calculate Now","quotaInitCancelBtn":"Calculate Later","quotaInitLater":"You can click the refresh button to calculate later","quotaCalculating":"Calculating quota, please wait...","quotaCalculateSuccess":"Quota calculation complete","quotaCalculateFailed":"Calculation failed","quotaCalculateError":"Calculation failed: "},"sysSecurity":{"authManagement":"Authentication Management","userAuth":"User Authentication","adminAuth":"Admin Authentication","uploadPassword":"Upload Password","confirmPassword":"Confirm Password","adminUsername":"Username","adminPassword":"Password","apiTokenManagement":"API Token Management","imageReview":"Image Review","imageReviewTooltip":"Only applies to non-chunked uploads, supports nsfwjs and moderatecontent.com channels","enableReview":"Enable Review","reviewChannel":"Review Channel","reviewChannelPlaceholder":"Select review channel","apiKey":"API Key","apiPath":"API Path","ipQuery":"IP Geolocation Query","ipQueryTooltip":"Calls a custom API during upload to query the upload IP location. Parameter values support the {\'{ip}\'} placeholder","enableIpQuery":"Enable Query","ipQueryChannel":"Query Channel","ipQueryChannelPlaceholder":"Select query channel","customApi":"Custom API","queryParams":"Query Parameters","paramNamePlaceholder":"Parameter name","paramValuePlaceholder":"Parameter value, e.g. {\'{ip}\'}","addQueryParam":"Add Parameter","responseFields":"Response Fields","responseFieldsTip":"The final display text is joined in field order","responseFieldPathPlaceholder":"JSON path, e.g. country.name","addResponseField":"Add Field","uploadManagement":"Upload Management","accessManagement":"Access Management","domainFilter":"Domain Filter","allowedDomains":"Allowed Domains","allowedDomainsTooltip":"1. Set permissions based on access domain
2. Leave empty to allow all, separate multiple domains with commas","whiteListMode":"Whitelist Mode","enableWhiteList":"Enable","enableWhiteListTooltip":"1. Set permissions based on files
2. When enabled, only whitelisted files can be accessed","imageTransform":"Image Resizing","enableImageTransform":"Enable","enableImageTransformTooltip":"Allows the file endpoint to process images using width, height, and fit parameters","imageTransformAllowedSizes":"Allowed Sizes","imageTransformAllowedSizesPlaceholder":"For example: 320xauto,640xauto,1280x720","imageTransformAllowedSizesHint":"Leave empty to allow any valid size
Separate entries with commas and use auto for an unrestricted dimension","imageTransformAllowedSizesInvalid":"Invalid size format. Use 320xauto, autox480, or 1280x720; each dimension is limited to 4096","settingsSaved":"Settings saved","tokenName":"Name","tokenValue":"Token","permissions":"Permissions","createdAt":"Created At","status":"Status","expiresAt":"Expires At","operation":"Actions","editBtn":"Edit","deleteBtn":"Delete","permUpload":"Upload","permDelete":"Delete","permList":"List","permManage":"Manage","createTokenTitle":"Create New API Token","tokenNameLabel":"Token Name","tokenNamePlaceholder":"Enter token name","permissionsLabel":"Permissions","neverExpire":"Never Expire","validPeriod":"Valid Period","autoDeleteOnExpire":"Auto-delete on expiry","createBtn":"Create","editTokenTitle":"Edit API Token","updateBtn":"Update","tokenCreatedTitle":"Token Created Successfully","tokenCreatedWarning":"Please save the following token. You won\'t be able to view the full token after closing this dialog!","fullToken":"Full Token","copyBtn":"Copy","savedBtn":"I\'ve Saved It","tokenCopied":"Token copied to clipboard","copyFailed":"Copy failed, please copy manually","tokenCreateSuccess":"Token created successfully","tokenCreateFailed":"Failed to create token","tokenUpdateSuccess":"Token updated successfully","tokenUpdateFailed":"Failed to update token","tokenDeleteConfirm":"This will permanently delete this token. Continue?","tokenDeleteConfirmTitle":"Notice","tokenDeleteConfirmOk":"OK","tokenDeleteConfirmCancel":"Cancel","tokenDeleteSuccess":"Token deleted successfully","tokenDeleteFailed":"Failed to delete token","tokenListFailed":"Failed to fetch token list","passwordUrlReserved":"Password cannot contain URL reserved characters: % & ? # /","confirmUploadPassword":"Please re-enter upload password","confirmAdminPassword":"Please re-enter admin password","passwordMismatch":"Passwords do not match","passwordUnchanged":"Unchanged (leave empty to keep current password)","adminPasswordChangedRelogin":"Admin password changed, redirecting to login page","clearPassword":"Clear authentication info","tokenNameRequired":"Please enter token name","permissionsRequired":"Please select permissions","validPeriodRequired":"Valid period must be greater than 0","timeUnitSeconds":"seconds","timeUnitMinutes":"minutes","timeUnitHours":"hours","timeUnitDays":"days","timeUnitMonths":"months","timeUnitYears":"years","sessionSecurityPolicy":"Session Security Policy","secureMode":"Secure Mode","secureModeTooltip":"When enabled, cookies are only transmitted over HTTPS. Make sure your site has HTTPS enabled","userSessionMaxAge":"User Session Max Age","adminSessionMaxAge":"Admin Session Max Age","sessionMaxAgeUnit":"days","sessionMaxAgeInvalid":"Session max age must be an integer from 1 to 3650"},"sysPage":{"settingsSaved":"Settings saved","refreshAnnouncement":"Reset announcement read status","otherSettings":"Other Settings","channelSelectPlaceholder":"Please select upload channel first"},"sysOthers":{"remoteTelemetry":"Remote Telemetry","remoteTelemetryTooltip":"Helps with issue tracking and debugging, recommended to enable","enable":"Enable","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"When set, backend operations like blocking and deleting won\'t be affected by CDN cache
Recommended, see documentation for setup","zoneId":"Zone ID","accountEmail":"Account Email","randomImageApi":"Random Image API","randomImageApiTooltip":"See documentation for API usage details","directory":"Directory","directoryTooltip":"1. Directories with random image access, defaults to root. Separate multiple directories with commas
2. All directories use absolute paths, e.g. /img/cover, meaning files in this directory and all subdirectories can be accessed by the random image API","publicBrowse":"Public Gallery","publicBrowseTooltip":"When enabled, visitors can browse images in specified directories via /browse path (read-only, no delete/move)","openDirectory":"Open Directory","openDirectoryTooltip":"

Directories open for public browsing, separate multiple with commas

Example: wallpaper,photos,album

Supports subdirectories: 2026/lucky,2026/rich

Access URL: https://your.domain/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"When enabled, images can be accessed and managed via WebDAV protocol","webdavUsername":"Username","webdavPassword":"Password","webdavUploadChannel":"Upload Channel","webdavDefaultChannel":"Default Channel","webdavChannelName":"Specified Channel","settingsSaved":"Settings saved"},"customerConfig":{"uploadFileList":"Upload File List","fileNameCol":"File Name","filePreview":"File Preview","uploadTimeCol":"Upload Time","ipAddress":"IP Address","address":"Address","uploadCount":"Upload Count","allowUpload":"Allow Upload","allow":"Allow","deny":"Deny","loadMore":"Load More","loadError":"Error loading more data, please check network connection","syncError":"Error syncing data, please check network connection"},"publicBrowse":{"searchPlaceholder":"Search file name or #page","fileCount":"{count} files","loading":"Loading...","retry":"Retry","creditText":"Gallery code contributed by LinJiang","loadingMore":"Loading...","allLoaded":"All loaded","creditLink":"LinJiang","browseDisabled":"Public browsing is not enabled","directoryNotAllowed":"This directory is not open for public access","accessDenied":"Access denied","loadFailed":"Load failed, please retry","rootDirectory":"Root","copyLink":"Copy Link","copied":"Copied","downloadBtn":"Download","swipeHint":"← Swipe to navigate →","rotate90":"Rotate 90°"},"transformMedia":{"download":"Download","playbackSpeed":"Playback Speed","normalSpeed":"Normal","playMode":"Play Mode","stopAfterPlay":"Stop After Play","sequentialPlay":"Sequential Play","loopSingle":"Loop Single","more":"More"},"directoryTree":{"selectDirectory":"Select Directory","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadFailed":"Failed to load directory tree, please check network connection"},"floatingSave":{"saving":"Saving","save":"Save"},"theme":{"lightMode":"Light Mode","darkMode":"Dark Mode","autoMode":"Auto Mode"},"common":{"confirm":"OK","cancel":"Cancel","close":"Close","save":"Save","delete":"Delete","edit":"Edit","copy":"Copy","download":"Download","retry":"Retry","loading":"Loading...","success":"Success","failed":"Failed","warning":"Warning","info":"Notice","yes":"Yes","no":"No","all":"All Types","select":"Select"},"validation":{"pathMustStartWithSlash":"Path must start with \\"/\\"","pathTraversalNotAllowed":"Path cannot contain \\"..\\"","singleDotNotAllowed":"Path cannot contain standalone \\".\\"","consecutiveSlashNotAllowed":"Path cannot contain consecutive slashes","invalidCharacters":"Path contains invalid characters, please use a valid path format","uploadDirReplace":"Upload directory"},"language":{"switchTo":"中/En","switchLanguage":"Switch Language"},"whitelist":{"title":"Whitelist Mode Enabled","description":"Sorry, the whitelist mode is currently enabled. Uploaded images need to be approved before they can be displayed. Please wait for approval.","goHome":"Go Home","goBack":"Go Back","helpText":"You can try:","uploadImage":"Upload Image","refreshPage":"Refresh Page"}}');const i="app-locale",r="zh-CN",s=new Set(["zh-CN","en"]);function d(e){return s.has(e)?e:null}function c(){return d(localStorage.getItem(i))}function u(e){return c()||d(e)||r}const m=(0,o.hU)({legacy:!0,locale:c()||r,fallbackLocale:r,messages:{"zh-CN":n,en:l}});function p(e){m.global.locale=e,document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}function h(e){const a=u(e);return p(a),a}function g(e){const a=d(e)||r;p(a),localStorage.setItem(i,a)}var f=m},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(16571),i=(t(15412),t(30372),t(98950)),r=t(30292),s=t(47984),d=t(79262),c=t(70193),u=t(55363),m=t(31050),p=t(22909),h=t(10220),g=t(74036),f=t(90389),y=t(81828),b=t(27483),C=t(66806),k=t(61536),T=t(3263),w=t(57038),v=t(63416),S=t(63027),F=t(19223),P=t(93422),A=t(16249),D=t(34335),L=t(14722),U=t(16829),N=t(53916),M=t(48749),I=t(2511),x=t(12375),R=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),z=t(18422),H=t(17214),V=t(44845),j=t(55319),K=t(71669),Q=t(38557),G=t(15925),J=t(10798),_=t(39329),Y=t(59708),X=t(41165),$=t(50230),Z=t(99288),ee=t(67992),ae=t(37538),te=t(13118),oe=t(36050),ne=t(69721),le=t(75192),ie=t(50672),re=t(3149),se=t(11221),de=t(73585),ce=t(63236),ue=t(1860),me=t(13110),pe=t(6246),he=t(42302),ge=t(75504),fe=t(40587),ye=t(5299),be=t(81775),Ce=t(13127),ke=t(18742),Te=t(97579),we=t(56746),ve=t(58422),Se=t(20444),Fe=t(88502),Pe=t(21872),Ae=t(64795),De=t(82262),Le=t(88921),Ue=t(39916),Ne=t(18579),Me=t(80500),Ie=t(58428),xe=t(87849),Re=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),ze=t(70577),He=t(93212),Ve=t(40275),je=t(52995),Ke=t(38410),Qe=t(167),Ge=t(53223),Je=t(97447),_e=t(67830),Ye=[u.rC,m.UH,p.B0,h.Ce,g.IN,s.xK,f.Df,y.ck,b.LB,C.e4,k.ok,T.$F,w.gK,v.e6,S.rQ,F.Jt,P.Wz,A.Xk,D.B2,L.a$,U.jB,d.ZD,N.wF,M.rO,I.jT,x.Xb,R.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,z.cb,H.MT,V.vH,j.v,K.bx,Q.tU,G.zp,J.A,_.pS,Y.A4,X.h8,$.o1,Z.UD,ee.mR,ae.ao,te.Uj,oe.gD,ne.Bw,le.CY,ie.In,re.v0,se.lS,de.jb,ce.yv,ue.Up,me.iW,pe.CQ,he.IT,ge.EZ,fe.xb,ye.PJ,be.X,Ce.ji,ke.is,Te.R9,we.QL,ve.wR,Se.oE,Fe.ye,Pe.UB,Ae.hS,De.Mj,Le.D6,Ue.QO,Ne.V2,Me.im,Ie.Gx,xe.H9,Re.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,ze.xi,He._2,Ve.DX,je.l9,Ke.GR,Qe.ns,Ge.Be,Je.Jm,_e.Mc],Xe=t(97722),$e=(t(85331),t(10961),t(56768));function Ze(e,a,t,o,n,l){const i=(0,$e.g2)("router-view"),r=Xe.H6;return(0,$e.uX)(),(0,$e.Wv)(r,{locale:l.elementLocale},{default:(0,$e.k6)(()=>[(0,$e.bF)(i)]),_:1},8,["locale"])}var ea=t(60782),aa=t(6166),ta=t(55186),oa=t(54791),na={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,ea.L8)(["userConfig","useDarkMode"]),elementLocale(){return"zh-CN"===this.$i18n.locale?ta.A:oa.A}},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(aa.ae.valid(document.body))return void(this.osInstance=(0,aa.ae)(document.body));this.osInstance=(0,aa.ae)(document.body,{scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"scroll",autoHideDelay:600,dragScroll:!0,clickScroll:!0},overflow:{x:"hidden",y:"scroll"}}),console.log("OverlayScrollbars initialized successfully")}catch(e){console.error("Failed to initialize OverlayScrollbars:",e)}},setupImageViewerObserver(){this.imageViewerObserver=new MutationObserver(e=>{const a=document.querySelector(".el-image-viewer__wrapper");a?this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"hidden"}}):this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"scroll"}})}),this.imageViewerObserver.observe(document.body,{childList:!0,subtree:!0})}}},la=t(71241);const ia=(0,la.A)(na,[["render",Ze]]);var ra=ia,sa=t(16915),da=t(25507),ca=t(46638),ua=t(57477);t(21862),t(50635);i.Yv.add(...Ye);const ma=(0,o.Ef)(ra),pa=(0,n.Zf)();ma.component("font-awesome-icon",r.gc);for(const[ba,Ca]of Object.entries(ua))ma.component(ba,Ca);const ha=()=>{const e=document.documentElement;let a;if(da.A.state.cusDarkMode&&null!==da.A.state.useDarkMode)a=da.A.state.useDarkMode;else{if(a=window.matchMedia("(prefers-color-scheme: dark)").matches,!a){const e=new Date,t=e.getHours();a=t>=22||t<6}da.A.commit("setUseDarkMode",a)}a?e.classList.add("dark"):e.classList.remove("dark")},ga=e=>{const a=document.documentElement;e?a.classList.add("dark"):a.classList.remove("dark")},fa=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},ya=(e,a)=>{const t=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');t.forEach(e=>e.remove());const o=document.createElement("link"),n=document.createElement("link"),l=document.createElement("link");o.rel="icon",n.rel="apple-touch-icon",l.rel="mask-icon",e?(o.href=a?.siteIcon||"/static/media/logo-dark.png",n.href=a?.siteIcon||"/static/media/logo-dark.png",l.href=a?.siteIcon||"/static/media/logo-dark.png"):(o.href=a?.siteIcon||"/static/media/logo.png",n.href=a?.siteIcon||"/static/media/logo.png",l.href=a?.siteIcon||"/static/media/logo.png"),document.head.appendChild(o),document.head.appendChild(n),document.head.appendChild(l)};da.A.dispatch("fetchUserConfig").then(()=>{(0,ca.BY)(da.A.getters.userConfig?.defaultLanguage),ha(),fa(da.A.getters.userConfig),ya(da.A.state.useDarkMode,da.A.getters.userConfig),da.A.subscribe((e,a)=>{"setUseDarkMode"===e.type&&da.A.state.cusDarkMode&&(ga(a.useDarkMode),ya(a.useDarkMode,da.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(ha(),ya(da.A.state.useDarkMode,da.A.getters.userConfig))}),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),(0,ca.BY)(),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).use(pa).mount("#app")})}},a={};function t(o){var n=a[o];if(void 0!==n)return n.exports;var l=a[o]={exports:{}};return e[o].call(l.exports,l,l.exports,t),l.exports}t.m=e,function(){var e=[];t.O=function(a,o,n,l){if(!o){var i=1/0;for(c=0;c=l)&&Object.keys(t.O).every(function(e){return t.O[e](o[s])})?o.splice(s--,1):(r=!1,l0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[o,n,l]}}(),function(){t.n=function(e){var a=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(a,{a:a}),a}}(),function(){t.d=function(e,a){for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce(function(a,o){return t.f[o](e,a),a},[]))}}(),function(){t.u=function(e){return"js/"+e+"."+{22:"755ee57d",206:"3ad66e7c",223:"a44c93f4",380:"3d87f1cb",385:"4d3f7ac7",417:"f95b3308",596:"aa72d40f",711:"936a7109",746:"d9b50432",773:"f0780366",787:"d0dbc2dd",799:"b7d288ff",903:"1e4b549d"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{173:"36158ceb",206:"e53da0eb",223:"6b74609d",322:"2b40f004",385:"4f25fc20",417:"774caa69",473:"f3f669e8",596:"292a1dcd",711:"1a30de22",746:"e53da0eb",773:"147d098d",787:"448a9124",799:"37a335d7"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)}}(),function(){var e={},a="sanyue_imghub:";t.l=function(o,n,l,i){if(e[o])e[o].push(n);else{var r,s;if(void 0!==l)for(var d=document.getElementsByTagName("script"),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

KXEJ@-PBav8lP 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콊No3s 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 YOUIqBmiD*C-pbwo0T~jzvVlDT04SS9IRF3v diff --git a/frontend-dist/js/app.9b801598.js.map.gz b/frontend-dist/js/app.9b801598.js.map.gz deleted file mode 100644 index 4f0a3900dd8655a76d30596ea2d2ac3e2ea1b955..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18808 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

Od;juO18<3@YE^MP4qCC>ipyA= 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.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.adminRequired)return l.A.commit("setAdminLoggedIn",!0),t();if(o.valid&&"admin"===o.authType)return l.A.commit("setAdminLoggedIn",!0),t();const i=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()}).catch(()=>{const a=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()})},d=(e,a,t)=>{i.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.userRequired)return l.A.commit("setUserLoggedIn",!0),t();if(o.valid)return l.A.commit("setUserLoggedIn",!0),t();const i=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()}).catch(()=>{const a=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()})},c=[{path:"/",name:"home",component:()=>Promise.all([t.e(903),t.e(173),t.e(473),t.e(437)]).then(t.bind(t,44437)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(206)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(540),t.e(473),t.e(609)]).then(t.bind(t,94251)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(540),t.e(581),t.e(223)]).then(t.bind(t,94223)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(540),t.e(581),t.e(757)]).then(t.bind(t,55757)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(746)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>Promise.all([t.e(903),t.e(711)]).then(t.bind(t,5215))},{path:"/whiteliston",name:"whiteliston",component:()=>Promise.all([t.e(903),t.e(773)]).then(t.bind(t,86569))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(385).then(t.bind(t,57385))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>Promise.all([t.e(903),t.e(787)]).then(t.bind(t,75875))}],u=(0,o.aE)({history:(0,o.LA)("/"),routes:c});a.A=u},25507:function(e,a,t){t(18111),t(61701);var o=t(60782),n=t(457),l=t(55131);a.A=(0,o.y$)({state:{userConfig:null,bingWallPapers:[],adminLoggedIn:!1,userLoggedIn:!1,uploadMethod:"default",uploadCopyUrlForm:"",compressConfig:{customerCompress:void 0,compressQuality:void 0,compressBar:void 0,serverCompress:void 0,convertToWebp:void 0},storeUploadChannel:"",storeChannelName:null,storeAutoRetry:!0,storeUploadNameType:"",uploadFolder:"",customUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},adminUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},autoReUpload:!0,useDarkMode:null,cusDarkMode:!1},getters:{userConfig:e=>e.userConfig,bingWallPapers:e=>e.bingWallPapers,adminLoggedIn:e=>e.adminLoggedIn,userLoggedIn:e=>e.userLoggedIn,storeUploadMethod:e=>e.uploadMethod,uploadCopyUrlForm:e=>e.uploadCopyUrlForm,compressConfig:e=>e.compressConfig,storeUploadChannel:e=>e.storeUploadChannel,storeChannelName:e=>e.storeChannelName,storeUploadNameType:e=>e.storeUploadNameType,customUrlSettings:e=>e.customUrlSettings,storeAutoRetry:e=>e.storeAutoRetry,adminUrlSettings:e=>e.adminUrlSettings,storeUploadFolder:e=>e.uploadFolder||localStorage.getItem("uploadFolder")||"",useDarkMode:e=>e.useDarkMode,cusDarkMode:e=>e.cusDarkMode,storeAutoReUpload:e=>e.autoReUpload},mutations:{setUserConfig(e,a){e.userConfig=a},setBingWallPapers(e,a){e.bingWallPapers=a},setAdminLoggedIn(e,a){e.adminLoggedIn=a},setUserLoggedIn(e,a){e.userLoggedIn=a},setUploadMethod(e,a){e.uploadMethod=a},setUploadCopyUrlForm(e,a){e.uploadCopyUrlForm=a},setCompressConfig(e,{key:a,value:t}){e.compressConfig[a]=t},setStoreUploadChannel(e,a){e.storeUploadChannel=a},setStoreChannelName(e,a){e.storeChannelName=a},setStoreUploadNameType(e,a){e.storeUploadNameType=a},setCustomUrlSettings(e,{key:a,value:t}){e.customUrlSettings[a]=t},setStoreAutoRetry(e,a){e.storeAutoRetry=a},setAdminUrlSettings(e,{key:a,value:t}){e.adminUrlSettings[a]=t},setUseDarkMode(e,a){e.useDarkMode=a},setCusDarkMode(e,a){e.cusDarkMode=a},setStoreUploadFolder(e,a){e.uploadFolder=a,localStorage.setItem("uploadFolder",a)},setStoreAutoReUpload(e,a){e.autoReUpload=a}},actions:{async fetchUserConfig({commit:e}){try{const a=await n.A.get("/api/userConfig");e("setUserConfig",a.data)}catch(a){console.log(a)}},async fetchBingWallPapers({commit:e}){try{const a=await n.A.get("/api/bing/wallpaper"),t=a.data.data,o=t.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(o.map(e=>new Promise((a,t)=>{const o=new Image;o.onload=a,o.onerror=t,o.src=e.url}))),e("setBingWallPapers",o)}catch(a){console.log(a)}}},modules:{},plugins:[(0,l.A)({paths:["userConfig","uploadMethod","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode"]})]})},46638:function(e,a,t){t.d(a,{Ay:function(){return f},BY:function(){return h},xS:function(){return g}});t(17642),t(58004),t(33853),t(45876),t(32475),t(15024),t(31698);var o=t(85384),n=JSON.parse('{"login":{"title":"登录到 {owner} 图床","adminTitle":"管理端登录","password":"密码","username":"用户名","passwordPlaceholder":"请输入认证码","usernamePlaceholder":"请输入用户名","adminPasswordPlaceholder":"请输入密码","submit":"登录","success":"登录成功","failed":"登录失败,请检查密码是否正确","adminFailed":"用户名或密码错误","serverError":"服务器错误","systemError":"系统错误","authRequired":"请先认证!","authFailed":"认证失败!"},"upload":{"folderPlaceholder":"上传目录","pasteUpload":"粘贴上传","fileUpload":"文件上传","selectFolderUpload":"选择文件夹上传","dragUploadText":"拖拽 点击 或 {pasteShortcut} 粘贴上传","pasteUrlPlaceholder":"粘贴外链上传,多个外链用换行分隔","pasteUploadBtn":"上 传","pasteSave":"转存","pasteExternal":"外链","history":"上传记录","announcement":"查看公告","noAnnouncement":"暂无公告","announcementTitle":"公告","announcementAck":"我已知晓!","settings":"上传设置","linkFormat":"链接格式","manage":"系统管理","logout":"退出登录","logoutSuccess":"已退出登录","viewDocs":"查看文档","switchUploadMethod":"切换上传方式","copyAll":"整体复制","retryFailed":"失败重试","clearList":"清空列表","clearAll":"清空全部","clearUploaded":"清空已上传"},"uploadForm":{"deleted":"{name}已删除","uploadSuccess":"{name}上传成功","uploadFailed":"{name}上传失败","compressFailedCannotUpload":"{name}压缩失败,无法上传!","fileTooLarge":"{name}文件过大,无法上传!","compressedFileTooLarge":"{name}压缩后文件过大,无法上传!","copySuccess":"复制成功","copyFailed":"复制失败","copyAllSuccess":"整体复制成功","fileNotUploaded":"文件未上传成功,无法复制链接","fileListCleared":"文件列表已清空","fileListEmpty":"文件列表为空","successFilesCleared":"成功上传文件已清空","successFilesEmpty":"成功上传文件为空","noFailedFiles":"无上传失败文件","autoRetryOn":"自动重试已开启","autoRetryOff":"自动重试已关闭","autoRetry":"自动重试","maxRetryReached":"{name} 已达到最大重试次数({max}),停止重试","urlRequestFailed":"粘贴板中的URL地址请求失败","chunkMerging":"分块上传完成,正在合并文件,请耐心等待...","fileSizeTooLarge":"文件过大","chunkInitFailed":"初始化分块上传失败","uploadError":"上传过程中发生错误","imageLoadFailed":"图片加载失败"},"uploadSettings":{"title":"上传设置","uploadChannel":"上传渠道","channelType":"渠道类型","allChannels":"全部","configuredChannelsOnly":"已配置","noConfiguredChannels":"暂无已配置渠道","channelName":"渠道名称","channelNameTooltip":"选择具体的渠道名称,不选择则使用负载均衡或默认渠道","autoSelect":"自动选择","uploadDirectory":"上传目录","uploadDirectoryPlaceholder":"请输入上传目录路径","autoSwitch":"自动切换","autoSwitchTooltip":"对于非分块上传文件,上传失败自动切换到其他渠道上传","fileNaming":"文件命名方式","namingDefault":"默认","namingIndex":"仅前缀","namingOrigin":"仅原名","namingShort":"短链接","filePreprocess":"文件预处理","filePreprocessTooltip":"上传前在本地进行格式转换和压缩,仅对图片文件生效","convertToWebp":"转换为WebP","convertToWebpTooltip":"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传","fileCompress":"文件压缩","compressThreshold":"压缩阈值","compressThresholdTooltip":"设置图片大小阈值,超过此值将自动压缩,单位MB","expectedSize":"期望大小","expectedSizeTooltip":"设置压缩后图片大小期望值,单位MB","serverCompress":"服务端压缩","serverCompressTooltip":"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题","enableCompress":"开启压缩","confirm":"确定"},"uploadHistory":{"title":"历史记录","totalRecords":"共 {count} 条","switchView":"切换视图","clearRecords":"清空记录","loading":"加载中...","pullToLoadMore":"下拉加载更多","noMoreRecords":"没有更多记录了","emptyHistory":"暂无上传记录","linkCopied":"链接已复制","copyFailed":"复制失败","clearConfirmTitle":"提示","clearConfirmMessage":"确定要清空所有上传记录吗?","clearConfirmOk":"确定","clearConfirmCancel":"取消","recordsCleared":"记录已清空","deleteConfirmMessage":"确定要删除这条记录吗?","recordDeleted":"记录已删除"},"settings":{"linkFormatTitle":"链接格式设置","defaultCopyLink":"默认复制链接","rawLink":"原始链接","customLink":"自定义链接","customLinkTooltip":"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入","enableCustom":"启用自定义","customPrefix":"自定义前缀","customPrefixPlaceholder":"请输入自定义链接前缀","confirm":"确定","s3Link":"S3链接"},"dashboard":{"searchPlaceholder":"搜索:#标签 -#排除标签","sortAsc":"升序","sortDesc":"降序","sortByTime":"时间","sortBySize":"大小","sortByRawName":"文件 ID","sortByFileName":"文件名","selectedItems":"项已选","clearSelection":"清除选择","copy":"复制","delete":"删除","download":"下载","move":"移动","tagManagement":"标签管理","addToBlacklist":"加入黑名单","addToWhitelist":"加入白名单","linkFormat":"链接格式","listView":"列表视图","cardView":"卡片视图","logout":"退出登录","rootDirectory":"根目录","totalFiles":"共 {count} 个文件","noMatchingFiles":"未找到匹配的文件或文件夹","currentDirEmpty":"当前目录为空","adjustSearchHint":"尝试调整搜索条件或筛选器","uploadHint":"上传文件后将显示在这里","loadMore":"加载更多","totalPages":"共 {count} 页","jumpTo":"跳至","preview":"预览","fileName":"文件名","tags":"标签","channelType":"渠道类型","channelNameCol":"渠道名称","uploadAddress":"上传地址","fileSize":"大小","uploadTime":"上传时间","actions":"操作","externalTag":"外链","unknownTag":"未知","detail":"详情","copyLink":"复制链接","moveFile":"移动","downloadFile":"下载","loadFailed":"加载失败","copySuccess":"复制成功","copyFailed":"复制失败","deleteConfirm":"此操作将永久删除该文件, 是否继续?","deleteConfirmTitle":"提示","deleteConfirmOk":"确定","deleteConfirmCancel":"取消","deleteSuccess":"删除成功","deleteFailed":"删除失败","blockConfirm":"此操作将把该文件加入黑名单, 是否继续?","blockSuccess":"加入黑名单成功","blockFailed":"加入黑名单失败","whiteConfirm":"此操作将把该文件加入白名单, 是否继续?","whiteSuccess":"加入白名单成功","whiteFailed":"加入白名单失败","deleteFolderConfirm":"此操作将永久删除文件夹, 是否继续?","deleteFileConfirm":"此操作将永久删除该文件, 是否继续?","batchDeleteConfirm":"此操作将永久删除选中的文件及文件夹, 是否继续?","batchDeleteSuccess":"批量删除成功","batchDeleteFailed":"批量删除失败","batchBlockConfirm":"此操作将把选中的文件加入黑名单, 是否继续?","batchBlockSuccess":"批量加入黑名单成功","batchBlockFailed":"批量加入黑名单失败","batchWhiteConfirm":"此操作将把选中的文件加入白名单, 是否继续?","batchWhiteSuccess":"批量加入白名单成功","batchWhiteFailed":"批量加入白名单失败","noLinksAvailable":"没有可复制的链接","batchCopySuccess":"批量复制 {count} 个链接成功","batchCopyFailed":"批量复制链接失败,请重试","batchCopyLinksSuccess":"批量复制链接成功","copyFileLinkSuccess":"复制文件链接成功","fileListMemoryCacheWarning":"文件列表较大,已切换为内存缓存;刷新页面后需要重新加载列表。","indexingWarning":"索引构建中,当前搜索和排序结果可能不准确,请稍后再试。","loadMoreFailed":"加载更多文件失败,请检查网络连接","moveSuccess":"移动成功","moveFailed":"移动失败","moveTargetSameAsCurrent":"目标文件夹不能是当前文件夹","invalidPageNumber":"请输入有效的页码","pageExceedsMax":"页码不能超过 {max}","loadingData":"正在加载数据,请稍候...","loadDataFailed":"加载数据失败,请检查网络连接","fetchFileListFailed":"获取文件列表失败","refreshFailed":"刷新失败,请重试","selectFilesFirst":"请先选择文件","syncDataError":"同步数据时出错,请检查网络连接","fetchingFileList":"正在获取文件列表...","folderEmptyNoLinks":"文件夹为空,没有可复制的链接","copiedFileLinks":"已复制 {count} 个文件链接","copyFolderLinksFailed":"复制文件夹链接失败,请重试"},"dashboardTabs":{"fileManagement":"文件管理","userManagement":"用户管理","systemSettings":"系统设置","fileUpload":"文件上传"},"fileDetail":{"title":"文件详情","download":"下载","tags":"标签","blacklist":"黑名单","whitelist":"白名单","deleteBtn":"删除","edit":"编辑","rename":"重命名","save":"保存","cancel":"取消","originUrl":"原始链接","fileNameLabel":"文件名","fileNamePlaceholder":"请输入文件名","fileType":"文件类型","fileTypePlaceholder":"如 image/jpeg","fileSizeLabel":"文件大小","imageDimensions":"图片尺寸","noDimensions":"无","uploadTimeLabel":"上传时间","channelTypeAndName":"渠道类型/名称","accessStatusAndReview":"访问状态/审查","uploadIP":"上传IP","uploadAddressLabel":"上传地址","fileTags":"文件标签","noTags":"暂无标签","unknown":"未知","accessNormal":"正常","accessNormalWhitelist":"正常(白名单)","accessBlockedBlacklist":"已屏蔽(黑名单)","accessBlockedReview":"已屏蔽(审查不通过)","orientationLandscape":"横","orientationPortrait":"竖","orientationSquare":"方","linkCopied":"链接已复制","metadataSaved":"元数据保存成功","metadataSaveFailed":"保存元数据失败","renameTitle":"重命名 File ID","renameLabel":"新 File ID","renamePlaceholder":"请输入新的 File ID","renameCancel":"取消","renameConfirm":"确认重命名","renameSuccess":"文件重命名成功","renameConflict":"目标文件名已存在","renameFailed":"重命名失败"},"filter":{"accessStatus":"访问状态","normal":"正常","blocked":"已屏蔽","blackWhiteList":"黑白名单","whiteList":"白名单","blackList":"黑名单","notSet":"未设置","reviewResult":"审查结果","teenContent":"12+内容","adultContent":"成人内容","fileType":"文件类型","image":"图片","video":"视频","audio":"音频","other":"其他","channelType":"渠道类型","externalLink":"外链","channelName":"渠道名称","clearFilters":"清除筛选"},"moveFile":{"title":"移动文件","batchTitle":"批量移动文件","targetDirectory":"目标目录","targetPlaceholder":"请输入目标目录路径","hint":"提示:路径以 / 开头表示根目录,如 /photos/2024/","hintMobile":"提示:路径以 / 开头表示根目录","selectDirectory":"选择目录","cancel":"取消","confirm":"确定","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadTreeFailed":"加载目录树失败,请检查网络连接"},"batchTag":{"title":"批量标签管理","addTab":"添加","removeTab":"移除","clearTab":"清空","addDescription":"为选中的 {count} 个文件添加标签","inputPlaceholder":"输入标签名称","pendingTags":"待添加的标签","noPendingTags":"暂无待添加标签","addToAllFiles":"添加到所有文件","removeDescription":"移除选中文件的共有标签","commonTags":"共有标签","noCommonTags":"选中的文件没有共有标签","clearDescription":"清空选中的 {count} 个文件的所有标签","clearWarningTitle":"⚠️警告","clearWarningDesc":"此操作将清空所有选中文件的标签,且不可恢复","confirmClearAll":"确认清空所有标签","tagAlreadyInList":"标签已在列表中","pleaseAddTags":"请先添加要批量添加的标签","addSuccess":"成功为 {count} 个文件添加标签","addFailed":"批量添加标签失败","removeSuccess":"成功从 {count} 个文件中移除标签","removeFailed":"移除标签失败","clearConfirmMessage":"确定要清空选中的 {count} 个文件的所有标签吗?此操作不可恢复。","clearConfirmTitle":"确认清空","clearConfirmOk":"确定","clearConfirmCancel":"取消","clearCancelled":"已取消清空操作","clearSuccess":"成功清空 {count} 个文件的标签","clearFailed":"清空标签失败","loadCommonTagsFailed":"加载共有标签失败"},"tagManagement":{"title":"标签管理","inputPlaceholder":"输入标签名称","currentTags":"当前标签","noTags":"暂无标签","popularTags":"常用标签","loading":"加载中...","noPopularTags":"暂无常用标签","close":"关闭","tagExists":"标签已存在","addSuccess":"标签添加成功","addFailed":"添加标签失败","removeSuccess":"标签删除成功","removeFailed":"删除标签失败","loadFailed":"加载标签失败"},"mobileAction":{"viewDetail":"查看详情","copyLink":"复制链接","downloadFile":"下载文件","moveFile":"移动文件","tagManagement":"标签管理","moveFolder":"移动文件夹","deleteFile":"删除文件","deleteFolder":"删除文件夹"},"mobileDirectory":{"title":"目录导航","rootDirectory":"根目录","goBack":"返回上一级"},"sysConfig":{"logout":"退出登录"},"sysConfigTabs":{"systemStatus":"系统状态","uploadSettings":"上传设置","securitySettings":"安全设置","pageSettings":"网页设置","otherSettings":"其他设置"},"dateRangeCalendar":{"previousMonth":"上个月","nextMonth":"下个月","startDate":"起始日期","endDate":"结束日期","rangeSeparator":"至","monthTitle":"{year}-{month}","weekdaySun":"日","weekdayMon":"一","weekdayTue":"二","weekdayWed":"三","weekdayThu":"四","weekdayFri":"五","weekdaySat":"六"},"sysStatus":{"systemOverview":"系统运行概览","healthHealthy":"运行正常","healthChecking":"正在检查","healthAttention":"状态读取异常","greetingMorning":"早上好,欢迎回来","greetingNoon":"中午好,保持好状态","greetingAfternoon":"下午好,工作顺利","greetingEvening":"晚上好,辛苦了","greetingLateNight":"夜深了,注意休息","summaryChecking":"正在连接系统服务并读取最新的索引信息…","summaryUnavailable":"暂时无法读取系统状态,请检查网络连接或稍后刷新页面。","summaryEmpty":"系统响应正常,索引服务已就绪,正在等待首个文件上传。","summaryIndexed":"系统响应正常,当前已索引 {files} 个文件。","summaryHealthy":"系统响应正常,当前已索引 {files} 个文件,覆盖 {channels} 个上传渠道。","localTime":"本地时间","localTimezone":"本地时区","totalFiles":"文件总数","clickToRefresh":"点击刷新","indexUpdateTime":"索引更新时间","systemVersion":"系统版本","clickToViewChangelog":"点击查看更新日志","channelDistribution":"上传渠道分布","fileStatusDistribution":"文件状态分布","uploadTrend":"上传趋势","uploadTrendGroupBy":"上传趋势分组方式","totalUploads":"上传总数","byChannelType":"渠道类型","byChannelName":"渠道名称","selectDateRange":"选择日期范围","otherChannels":"其他","uploadsUnit":"次","noData":"暂无数据","totalFilesLabel":"文件总数","statusTypes":"状态类型","systemMaintenance":"系统维护","rebuildIndex":"重建索引","rebuilding":"重建中...","rebuildTooltip":"重新扫描所有文件并更新索引数据,适用于数据不一致时的修复","backupData":"备份数据","backingUp":"备份中...","backupTooltip":"备份所有文件元数据和系统设置到JSON文件","restoreData":"恢复数据","restoring":"恢复中...","restoreTooltip":"从备份文件恢复数据,将覆盖现有的文件元数据和系统设置","cancelOperation":"取消操作","retry":"重试","close":"关闭","records":"条记录","aboutToComplete":"即将完成","seconds":"约 {count} 秒","minutes":"约 {count} 分钟","hoursMinutes":"约 {hours} 小时 {minutes} 分钟","phaseFetching":"正在获取数据","phaseSorting":"正在排序","phaseUploading":"正在上传","phaseFinalizing":"正在完成","phaseBuilding":"正在构建备份","phaseDownloading":"正在生成下载","phaseRestoringFiles":"正在恢复文件","phaseRestoringSettings":"正在恢复设置","phaseCompleted":"已完成","phaseRetrying":"正在重试","rebuildSuccess":"索引重建完成!共处理 {count} 个文件","backupSuccess":"备份完成!共备份 {count} 个文件","backupSuccessWithSettings":"备份完成!共备份 {fileCount} 个文件,{settingsCount} 个设置项","operationInProgress":"已有操作正在进行中","selectJsonFile":"请选择JSON格式的备份文件","restoreConfirmMessage":"恢复操作将覆盖现有的文件元数据和系统设置,此操作不可逆。确定要继续吗?","restoreConfirmTitle":"确认恢复","restoreConfirmOk":"确定恢复","restoreConfirmCancel":"取消","invalidBackupFile":"备份文件格式无效,请选择有效的 JSON 文件","restoreSuccess":"恢复完成!已恢复 {files} 个文件和 {settings} 个设置项,正在重建索引...","restoreFailed":"恢复数据失败","fetchIndexFailed":"获取索引信息失败","unknown":"未知","blocked":"已屏蔽","normalStatus":"正常","latestUpload":"最近上传","earliestUpload":"最早上传","daysAgo":"{count}天前","hoursAgo":"{count}小时前","minutesAgo":"{count}分钟前","justNow":"刚刚","cancellingRebuild":"正在取消索引重建..."},"sysUpload":{"title":"上传渠道管理","titleTooltip":"管理所有上传渠道的配置,点击卡片查看详情或编辑","filterPlaceholder":"筛选渠道类型","addChannel":"添加渠道","loadBalance":"负载均衡","unnamedChannel":"未命名渠道","envVariable":"环境变量","noChannels":"暂无 {type} 渠道","detail":"详情","editBtn":"编辑","deleteBtn":"删除","addDialogTitle":"添加新渠道","channelTypeLabel":"渠道类型","channelTypePlaceholder":"请选择渠道类型","channelNameLabel":"渠道名称","channelNamePlaceholder":"请输入渠道名称","channelNameImmutableTip":"添加后将作为文件关联渠道的唯一标识,不支持修改","channelNameEditDisabledTip":"渠道名称用于关联已上传文件,不支持修改","botTokenLabel":"Bot Token","botTokenPlaceholder":"请输入 Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"请输入 Chat ID","proxyDomain":"代理域名","proxyDomainPlaceholder":"可选,例如: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"例如: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN 域名","cdnDomainPlaceholder":"可选,请填写完整 CDN 访问地址前缀,例如:https://cdn.example.com","cdnDomainTip":"可选配置。可用于生成和展示文件访问链接,服务端读取文件内容时也会优先尝试通过 CDN 读取。","bucketName":"存储桶名称","bucketNamePlaceholder":"请输入存储桶名称","bucketRegion":"存储桶区域","bucketRegionPlaceholder":"默认填写 auto","accessKeyId":"访问密钥 ID","accessKeyIdPlaceholder":"请输入访问密钥 ID","secretAccessKey":"机密访问密钥","secretAccessKeyPlaceholder":"请输入机密访问密钥","pathStyle":"路径风格","pathStyleTip":"使用 OpenList 等不兼容主机风格服务时需开启","quotaLimit":"容量限制","quotaLimitGB":"容量上限 (GB)","quotaThreshold":"停用阈值 (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"请输入 Channel ID","nitroMember":"Nitro 会员","nitroTip":"会员单文件限制 25MB,否则为 10MB","discordWarning":"Discord 有接口频率限制,不建议将其用作大规模并发场景","repoName":"仓库名","repoNamePlaceholder":"格式: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"请输入 Access Token","privateRepo":"私有仓库","privateRepoTip":"私有仓库限制 100GB","webdavBaseUrl":"WebDAV 基础地址","webdavBaseUrlPlaceholder":"例如: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"用户名","webdavUsernamePlaceholder":"可选用户名","webdavPassword":"密码","webdavPasswordPlaceholder":"可选密码","webdavPublicUrlPlaceholder":"可选,请填写完整公开访问地址前缀,例如:https://cdn.example.com/imgbed","webdavPublicUrlTip":"可选配置。服务端读取文件内容时会优先尝试通过该公开地址读取,失败后回退 WebDAV API。","webdavHeaders":"自定义请求头","webdavHeadersPlaceholder":"可选 JSON 对象,例如: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"自定义请求头必须是有效的 JSON 对象","webdavCreateDirectory":"自动创建目录","webdavCreateDirectoryTip":"上传文件前自动创建父级目录","cancel":"取消","confirmAdd":"确认添加","detailDialogTitle":"渠道详情 - {name}","channelNameDetail":"渠道名称","channelTypeDetail":"渠道类型","statusLabel":"状态","enabled":"已启用","disabled":"已禁用","configSource":"配置来源","publicUrl":"公开访问链接","notSet":"未设置","isPathStyle":"是","isNotPathStyle":"否","currentUsage":"当前用量","closeBtn":"关闭","editDialogTitle":"编辑渠道 - {name}","enableChannel":"启用渠道","saveChanges":"保存修改","r2ConfigNote":"请按照 配置 R2 渠道 文档说明添加 R2 渠道","reservedName":"该名称为系统保留名称,请使用其他名称","duplicateName":"该类型下已存在同名渠道,请使用其他名称","fixedChannelCannotDelete":"环境变量配置的渠道无法删除","deleteChannelConfirm":"确定要删除该渠道吗?删除后,仍关联该渠道的文件可能无法访问。","quotaInitConfirm":"首次启用容量限制需要统计现有文件容量,这可能需要一些时间。是否立即统计?","quotaInitTitle":"初始化容量统计","quotaInitConfirmBtn":"立即统计","quotaInitCancelBtn":"稍后手动统计","quotaInitLater":"您可以稍后点击刷新按钮手动统计","quotaCalculating":"正在统计容量,请稍候...","quotaCalculateSuccess":"容量统计完成","quotaCalculateFailed":"统计失败","quotaCalculateError":"统计失败: "},"sysSecurity":{"authManagement":"认证管理","userAuth":"用户端认证","adminAuth":"管理端认证","uploadPassword":"上传密码","confirmPassword":"确认密码","adminUsername":"用户名","adminPassword":"密码","apiTokenManagement":"API Token 管理","imageReview":"图像审查","imageReviewTooltip":"仅对非分块上传文件生效,支持 nsfwjs 和 moderatecontent.com 渠道","enableReview":"开启审查","reviewChannel":"审查渠道","reviewChannelPlaceholder":"请选择审查渠道","apiKey":"API Key","apiPath":"API 路径","ipQuery":"IP 归属地查询","ipQueryTooltip":"上传时按配置调用自定义 API 查询上传 IP 归属地,参数值支持 {\'{ip}\'} 占位符","enableIpQuery":"开启查询","ipQueryChannel":"查询渠道","ipQueryChannelPlaceholder":"请选择查询渠道","customApi":"自定义 API","queryParams":"查询参数","paramNamePlaceholder":"参数名","paramValuePlaceholder":"参数值,如 {\'{ip}\'}","addQueryParam":"添加参数","responseFields":"响应字段","responseFieldsTip":"最终显示内容会按照字段顺序拼接","responseFieldPathPlaceholder":"JSON 路径,如 country.name","addResponseField":"添加字段","uploadManagement":"上传管理","accessManagement":"访问管理","domainFilter":"域名过滤","allowedDomains":"放行域名","allowedDomainsTooltip":"1.针对访问域名设置权限
2.留空默认全部放行,多个域名请用英文逗号分隔","whiteListMode":"白名单模式","enableWhiteList":"是否开启","enableWhiteListTooltip":"1.针对文件设置权限
2.开启后,仅被加入白名单的文件可被访问","imageTransform":"图片尺寸处理","enableImageTransform":"是否开启","enableImageTransformTooltip":"开启后,读取文件接口可通过 width、height 和 fit 参数处理图片尺寸","imageTransformAllowedSizes":"允许尺寸","imageTransformAllowedSizesPlaceholder":"例如 320xauto,640xauto,1280x720","imageTransformAllowedSizesHint":"留空允许任意合法尺寸
多个尺寸用英文逗号分隔,单边未限制时填写 auto","imageTransformAllowedSizesInvalid":"尺寸格式无效,请使用 320xauto、autox480 或 1280x720,单边最大 4096","settingsSaved":"设置已保存","tokenName":"名称","tokenValue":"Token","permissions":"权限","createdAt":"创建时间","status":"状态","expiresAt":"过期时间","operation":"操作","editBtn":"编辑","deleteBtn":"删除","permUpload":"上传","permDelete":"删除","permList":"列出","permManage":"管理","createTokenTitle":"创建新 API Token","tokenNameLabel":"Token 名称","tokenNamePlaceholder":"请输入Token名称","permissionsLabel":"权限","neverExpire":"永不过期","validPeriod":"有效期","autoDeleteOnExpire":"过期自动删除","createBtn":"创建","editTokenTitle":"编辑 API Token","updateBtn":"更新","tokenCreatedTitle":"Token 创建成功","tokenCreatedWarning":"请妥善保存以下Token,关闭此窗口后将无法再次查看完整Token!","fullToken":"完整Token","copyBtn":"复制","savedBtn":"我已保存","tokenCopied":"Token已复制到剪贴板","copyFailed":"复制失败,请手动复制","tokenCreateSuccess":"Token创建成功","tokenCreateFailed":"Token创建失败","tokenUpdateSuccess":"Token更新成功","tokenUpdateFailed":"Token更新失败","tokenDeleteConfirm":"此操作将永久删除该Token,是否继续?","tokenDeleteConfirmTitle":"提示","tokenDeleteConfirmOk":"确定","tokenDeleteConfirmCancel":"取消","tokenDeleteSuccess":"Token删除成功","tokenDeleteFailed":"Token删除失败","tokenListFailed":"获取Token列表失败","passwordUrlReserved":"密码不能包含部分URL保留字符: % & ? # /","confirmUploadPassword":"请再次输入上传密码","confirmAdminPassword":"请再次输入管理密码","passwordMismatch":"两次输入密码不一致","passwordUnchanged":"未修改(留空保持原密码)","adminPasswordChangedRelogin":"管理端密码已修改,即将跳转到登录页","clearPassword":"清除认证信息","tokenNameRequired":"请输入Token名称","permissionsRequired":"请选择权限","validPeriodRequired":"有效期数值必须大于 0","timeUnitSeconds":"秒","timeUnitMinutes":"分钟","timeUnitHours":"小时","timeUnitDays":"天","timeUnitMonths":"月","timeUnitYears":"年","sessionSecurityPolicy":"会话安全策略","secureMode":"Secure 模式","secureModeTooltip":"开启后,Cookie 仅通过 HTTPS 连接传输,请确保您的站点已启用 HTTPS","userSessionMaxAge":"用户端会话有效期","adminSessionMaxAge":"管理端会话有效期","sessionMaxAgeUnit":"天","sessionMaxAgeInvalid":"会话有效期必须为 1-3650 的正整数"},"sysPage":{"settingsSaved":"设置已保存","refreshAnnouncement":"刷新公告已读状态","otherSettings":"其他设置","channelSelectPlaceholder":"请先选择上传渠道"},"sysOthers":{"remoteTelemetry":"远端遥测","remoteTelemetryTooltip":"便于问题查找和定位,建议开启","enable":"启用","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"设置后可以使后端拉黑、删除等操作不受CDN缓存限制
建议设置,设置方式请查阅文档","zoneId":"区域ID","accountEmail":"账户邮箱","randomImageApi":"随机图像API","randomImageApiTooltip":"API具体用法请查阅文档","directory":"目录","directoryTooltip":"1. 开放随机图权限的目录,默认为根目录,多个目录用逗号分隔
2. 目录均采用绝对路径,例如/img/cover,表示该目录及其所有子目录的文件可被随机图API访问","publicBrowse":"访客图库","publicBrowseTooltip":"启用后,访客可通过 /browse 路径浏览指定目录的图片(只读,无法删除/移动)","openDirectory":"开放目录","openDirectoryTooltip":"

允许公开浏览的目录,多个目录用逗号分隔

示例:wallpaper,photos,album

支持子目录:2026/lucky,2026/rich

访问链接:https://你的域名/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"启用后,可以通过WebDAV协议访问和管理图片","webdavUsername":"用户名","webdavPassword":"密码","webdavUploadChannel":"上传渠道","webdavDefaultChannel":"默认渠道","webdavChannelName":"指定渠道名","settingsSaved":"设置已保存"},"customerConfig":{"uploadFileList":"上传文件列表","fileNameCol":"文件名","filePreview":"文件预览","uploadTimeCol":"上传时间","ipAddress":"IP地址","address":"地址","uploadCount":"上传次数","allowUpload":"允许上传","allow":"允许","deny":"禁止","loadMore":"加载更多","loadError":"加载更多数据时出错,请检查网络连接","syncError":"同步数据时出错,请检查网络连接"},"publicBrowse":{"searchPlaceholder":"搜索文件名 或 #页码","fileCount":"{count} 个文件","loading":"加载中...","retry":"重试","creditText":"该图库由林酱贡献代码","loadingMore":"加载中...","allLoaded":"已加载全部","creditLink":"林酱贡献","browseDisabled":"公开浏览功能未启用","directoryNotAllowed":"该目录不允许公开访问","accessDenied":"访问被拒绝","loadFailed":"加载失败,请重试","rootDirectory":"根目录","copyLink":"复制链接","copied":"已复制","downloadBtn":"下载","swipeHint":"← 滑动切换 →","rotate90":"旋转90°"},"transformMedia":{"download":"下载","playbackSpeed":"播放速度","normalSpeed":"正常","playMode":"播放模式","stopAfterPlay":"播完停止","sequentialPlay":"顺序播放","loopSingle":"单曲循环","more":"更多"},"directoryTree":{"selectDirectory":"选择目录","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadFailed":"加载目录树失败,请检查网络连接"},"floatingSave":{"saving":"保存中","save":"保存"},"theme":{"lightMode":"浅色模式","darkMode":"深色模式","autoMode":"自动模式"},"common":{"confirm":"确定","cancel":"取消","close":"关闭","save":"保存","delete":"删除","edit":"编辑","copy":"复制","download":"下载","retry":"重试","loading":"加载中...","success":"成功","failed":"失败","warning":"警告","info":"提示","yes":"是","no":"否","all":"全部类型","select":"请选择"},"validation":{"pathMustStartWithSlash":"目标目录必须以 \\"/\\" 开头","pathTraversalNotAllowed":"目标目录不能包含路径穿越字符 \\"..\\"","singleDotNotAllowed":"目标目录不能包含单独的 \\".\\" 路径段","consecutiveSlashNotAllowed":"目标目录不能包含连续的斜杠","invalidCharacters":"目标目录包含非法字符,请使用合法的路径格式","uploadDirReplace":"上传目录"},"language":{"switchTo":"中/En","switchLanguage":"切换语言"},"whitelist":{"title":"白名单模式已启用","description":"抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。","goHome":"返回首页","goBack":"返回上页","helpText":"您可以尝试:","uploadImage":"图片上传","refreshPage":"刷新页面"}}'),l=JSON.parse('{"login":{"title":"Login to {owner} ImgHub","adminTitle":"Admin Login","password":"Password","username":"Username","passwordPlaceholder":"Enter auth code","usernamePlaceholder":"Enter username","adminPasswordPlaceholder":"Enter password","submit":"Login","success":"Login successful","failed":"Login failed, please check your password","adminFailed":"Invalid username or password","serverError":"Server error","systemError":"System error","authRequired":"Please authenticate first!","authFailed":"Authentication failed!"},"upload":{"folderPlaceholder":"Upload directory","pasteUpload":"Paste Upload","fileUpload":"File Upload","selectFolderUpload":"Choose a folder to upload","dragUploadText":"Drag Click or {pasteShortcut} to paste upload","pasteUrlPlaceholder":"Paste external links, separate multiple links with line breaks","pasteUploadBtn":"Upload","pasteSave":"Save","pasteExternal":"External","history":"Upload History","announcement":"Announcements","noAnnouncement":"No announcements","announcementTitle":"Announcement","announcementAck":"Got it!","settings":"Upload Settings","linkFormat":"Link Format","manage":"Management","logout":"Logout","logoutSuccess":"Logged out","viewDocs":"Documentation","switchUploadMethod":"Switch Upload Method","copyAll":"Copy All","retryFailed":"Retry Failed","clearList":"Clear List","clearAll":"Clear All","clearUploaded":"Clear Uploaded"},"uploadForm":{"deleted":"{name} deleted","uploadSuccess":"{name} uploaded successfully","uploadFailed":"{name} upload failed","compressFailedCannotUpload":"{name} compression failed, cannot upload!","fileTooLarge":"{name} file too large, cannot upload!","compressedFileTooLarge":"{name} still too large after compression, cannot upload!","copySuccess":"Copied successfully","copyFailed":"Copy failed","copyAllSuccess":"All copied successfully","fileNotUploaded":"File not uploaded, cannot copy link","fileListCleared":"File list cleared","fileListEmpty":"File list is empty","successFilesCleared":"Uploaded files cleared","successFilesEmpty":"No uploaded files","noFailedFiles":"No failed files","autoRetryOn":"Auto retry enabled","autoRetryOff":"Auto retry disabled","autoRetry":"Auto Retry","maxRetryReached":"{name} reached max retry limit ({max}), stopping","urlRequestFailed":"URL request from clipboard failed","chunkMerging":"Chunk upload complete, merging file, please wait...","fileSizeTooLarge":"File too large","chunkInitFailed":"Failed to init chunked upload","uploadError":"Upload error occurred","imageLoadFailed":"Image load failed"},"uploadSettings":{"title":"Upload Settings","uploadChannel":"Upload Channel","channelType":"Channel Type","allChannels":"All Channels","configuredChannelsOnly":"Configured Only","noConfiguredChannels":"No configured channels","channelName":"Channel Name","channelNameTooltip":"Select a specific channel name. If not selected, load balancing or default channel will be used","autoSelect":"Auto Select","uploadDirectory":"Upload Directory","uploadDirectoryPlaceholder":"Enter upload directory path","autoSwitch":"Auto Switch","autoSwitchTooltip":"For non-chunked uploads, automatically switch to another channel on failure","fileNaming":"File Naming","namingDefault":"Default","namingIndex":"Prefix Only","namingOrigin":"Original Name","namingShort":"Short Link","filePreprocess":"File Preprocessing","filePreprocessTooltip":"Convert format and compress locally before upload, only applies to image files","convertToWebp":"Convert to WebP","convertToWebpTooltip":"Convert images to WebP format before upload to reduce file size. Falls back to original format on failure","fileCompress":"File Compression","compressThreshold":"Compression Threshold","compressThresholdTooltip":"Set image size threshold, files exceeding this will be auto-compressed (MB)","expectedSize":"Expected Size","expectedSizeTooltip":"Set expected image size after compression (MB)","serverCompress":"Server-side Compression","serverCompressTooltip":"1. Compress on Telegram side, only applies to image files uploaded via Telegram channel
2. If image size (after local compression) exceeds 10MB, this setting is ignored
3. For high-resolution, transparent background images, it\'s recommended to disable server compression to avoid issues","enableCompress":"Enable Compression","confirm":"OK"},"uploadHistory":{"title":"History","totalRecords":"{count} records","switchView":"Switch View","clearRecords":"Clear Records","loading":"Loading...","pullToLoadMore":"Pull to load more","noMoreRecords":"No more records","emptyHistory":"No upload history","linkCopied":"Link copied","copyFailed":"Copy failed","clearConfirmTitle":"Notice","clearConfirmMessage":"Are you sure you want to clear all upload records?","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","recordsCleared":"Records cleared","deleteConfirmMessage":"Are you sure you want to delete this record?","recordDeleted":"Record deleted"},"settings":{"linkFormatTitle":"Link Format Settings","defaultCopyLink":"Default Copy Format","rawLink":"Raw Link","customLink":"Custom Link","customLinkTooltip":"Default link is https://your.domain/file/xxx.jpg
If custom link format is enabled, only the xxx.jpg part is kept, please enter the rest manually","enableCustom":"Enable Custom","customPrefix":"Custom Prefix","customPrefixPlaceholder":"Enter custom link prefix","confirm":"OK","s3Link":"S3 Link"},"dashboard":{"searchPlaceholder":"Search: #tag -#exclude","sortAsc":"Ascending","sortDesc":"Descending","sortByTime":"Time","sortBySize":"Size","sortByRawName":"File ID","sortByFileName":"File Name","selectedItems":"selected","clearSelection":"Clear selection","copy":"Copy","delete":"Delete","download":"Download","move":"Move","tagManagement":"Tag Management","addToBlacklist":"Add to Blacklist","addToWhitelist":"Add to Whitelist","linkFormat":"Link Format","listView":"List View","cardView":"Card View","logout":"Logout","rootDirectory":"Root","totalFiles":"{count} files","noMatchingFiles":"No matching files or folders found","currentDirEmpty":"Current directory is empty","adjustSearchHint":"Try adjusting search criteria or filters","uploadHint":"Uploaded files will appear here","loadMore":"Load More","totalPages":"{count} pages","jumpTo":"Go to","preview":"Preview","fileName":"File Name","tags":"Tags","channelType":"Channel Type","channelNameCol":"Channel Name","uploadAddress":"Upload Address","fileSize":"Size","uploadTime":"Upload Time","actions":"Actions","externalTag":"External","unknownTag":"Unknown","detail":"Detail","copyLink":"Copy Link","moveFile":"Move","downloadFile":"Download","loadFailed":"Load failed","copySuccess":"Copied successfully","copyFailed":"Copy failed","deleteConfirm":"This will permanently delete this file. Continue?","deleteConfirmTitle":"Notice","deleteConfirmOk":"OK","deleteConfirmCancel":"Cancel","deleteSuccess":"Deleted successfully","deleteFailed":"Delete failed","blockConfirm":"This will add the file to blacklist. Continue?","blockSuccess":"Added to blacklist successfully","blockFailed":"Failed to add to blacklist","whiteConfirm":"This will add the file to whitelist. Continue?","whiteSuccess":"Added to whitelist successfully","whiteFailed":"Failed to add to whitelist","deleteFolderConfirm":"This will permanently delete this folder. Continue?","deleteFileConfirm":"This will permanently delete this file. Continue?","batchDeleteConfirm":"This will permanently delete selected files and folders. Continue?","batchDeleteSuccess":"Batch delete successful","batchDeleteFailed":"Batch delete failed","batchBlockConfirm":"This will add selected files to blacklist. Continue?","batchBlockSuccess":"Batch blacklist successful","batchBlockFailed":"Batch blacklist failed","batchWhiteConfirm":"This will add selected files to whitelist. Continue?","batchWhiteSuccess":"Batch whitelist successful","batchWhiteFailed":"Batch whitelist failed","noLinksAvailable":"No links to copy","batchCopySuccess":"Copied {count} links successfully","batchCopyFailed":"Batch copy failed, please retry","batchCopyLinksSuccess":"Batch copy successful","copyFileLinkSuccess":"File link copied","fileListMemoryCacheWarning":"The file list is large, so it is being kept in memory. Refreshing the page will require loading it again.","indexingWarning":"The index is still building, so current search and sort results may be inaccurate. Please try again later.","loadMoreFailed":"Failed to load more files, please check network","moveSuccess":"Moved successfully","moveFailed":"Move failed","moveTargetSameAsCurrent":"Target folder cannot be the current folder","invalidPageNumber":"Please enter a valid page number","pageExceedsMax":"Page number cannot exceed {max}","loadingData":"Loading data, please wait...","loadDataFailed":"Failed to load data, please check network","fetchFileListFailed":"Failed to fetch file list","refreshFailed":"Refresh failed, please retry","selectFilesFirst":"Please select files first","syncDataError":"Error syncing data, please check network","fetchingFileList":"Fetching file list...","folderEmptyNoLinks":"Folder is empty, no links to copy","copiedFileLinks":"Copied {count} file links","copyFolderLinksFailed":"Failed to copy folder links, please retry"},"dashboardTabs":{"fileManagement":"File Management","userManagement":"User Management","systemSettings":"System Settings","fileUpload":"File Upload"},"fileDetail":{"title":"File Details","download":"Download","tags":"Tags","blacklist":"Blacklist","whitelist":"Whitelist","deleteBtn":"Delete","edit":"Edit","rename":"Rename","save":"Save","cancel":"Cancel","originUrl":"Original Link","fileNameLabel":"File Name","fileNamePlaceholder":"Enter file name","fileType":"File Type","fileTypePlaceholder":"e.g. image/jpeg","fileSizeLabel":"File Size","imageDimensions":"Dimensions","noDimensions":"N/A","uploadTimeLabel":"Upload Time","channelTypeAndName":"Channel Type/Name","accessStatusAndReview":"Access Status/Review","uploadIP":"Upload IP","uploadAddressLabel":"Upload Address","fileTags":"File Tags","noTags":"No tags","unknown":"Unknown","accessNormal":"Normal","accessNormalWhitelist":"Normal (Whitelisted)","accessBlockedBlacklist":"Blocked (Blacklisted)","accessBlockedReview":"Blocked (Review rejected)","orientationLandscape":"Landscape","orientationPortrait":"Portrait","orientationSquare":"Square","linkCopied":"Link copied","metadataSaved":"Metadata saved successfully","metadataSaveFailed":"Failed to save metadata","renameTitle":"Rename File ID","renameLabel":"New File ID","renamePlaceholder":"Enter new File ID","renameCancel":"Cancel","renameConfirm":"Confirm Rename","renameSuccess":"File renamed successfully","renameConflict":"Target file name already exists","renameFailed":"Rename failed"},"filter":{"accessStatus":"Access Status","normal":"Normal","blocked":"Blocked","blackWhiteList":"Black/White List","whiteList":"Whitelist","blackList":"Blacklist","notSet":"Not Set","reviewResult":"Review Result","teenContent":"12+ Content","adultContent":"Adult Content","fileType":"File Type","image":"Image","video":"Video","audio":"Audio","other":"Other","channelType":"Channel Type","externalLink":"External Link","channelName":"Channel Name","clearFilters":"Clear Filters"},"moveFile":{"title":"Move File","batchTitle":"Batch Move Files","targetDirectory":"Target Directory","targetPlaceholder":"Enter target directory path","hint":"Tip: Paths starting with / indicate root directory, e.g. /photos/2024/","hintMobile":"Tip: Paths starting with / indicate root directory","selectDirectory":"Select Directory","cancel":"Cancel","confirm":"OK","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadTreeFailed":"Failed to load directory tree, please check network connection"},"batchTag":{"title":"Batch Tag Management","addTab":"Add","removeTab":"Remove","clearTab":"Clear","addDescription":"Add tags to {count} selected files","inputPlaceholder":"Enter tag name","pendingTags":"Tags to add","noPendingTags":"No tags to add","addToAllFiles":"Add to all files","removeDescription":"Remove common tags from selected files","commonTags":"Common Tags","noCommonTags":"Selected files have no common tags","clearDescription":"Clear all tags from {count} selected files","clearWarningTitle":"⚠️Warning","clearWarningDesc":"This will clear all tags from selected files and cannot be undone","confirmClearAll":"Confirm clear all tags","tagAlreadyInList":"Tag already in list","pleaseAddTags":"Please add tags first","addSuccess":"Tags added to {count} files successfully","addFailed":"Batch tag addition failed","removeSuccess":"Tags removed from {count} files successfully","removeFailed":"Tag removal failed","clearConfirmMessage":"Are you sure you want to clear all tags from {count} selected files? This cannot be undone.","clearConfirmTitle":"Confirm Clear","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","clearCancelled":"Clear operation cancelled","clearSuccess":"Tags cleared from {count} files successfully","clearFailed":"Failed to clear tags","loadCommonTagsFailed":"Failed to load common tags"},"tagManagement":{"title":"Tag Management","inputPlaceholder":"Enter tag name","currentTags":"Current Tags","noTags":"No tags","popularTags":"Popular Tags","loading":"Loading...","noPopularTags":"No popular tags","close":"Close","tagExists":"Tag already exists","addSuccess":"Tag added successfully","addFailed":"Failed to add tag","removeSuccess":"Tag removed successfully","removeFailed":"Failed to remove tag","loadFailed":"Failed to load tags"},"mobileAction":{"viewDetail":"View Details","copyLink":"Copy Link","downloadFile":"Download File","moveFile":"Move File","tagManagement":"Tag Management","moveFolder":"Move Folder","deleteFile":"Delete File","deleteFolder":"Delete Folder"},"mobileDirectory":{"title":"Directory Navigation","rootDirectory":"Root","goBack":"Go Back"},"sysConfig":{"logout":"Logout"},"sysConfigTabs":{"systemStatus":"System Status","uploadSettings":"Upload Settings","securitySettings":"Security Settings","pageSettings":"Page Settings","otherSettings":"Other Settings"},"dateRangeCalendar":{"previousMonth":"Previous month","nextMonth":"Next month","startDate":"Start date","endDate":"End date","rangeSeparator":"to","monthTitle":"{year}-{month}","weekdaySun":"Sun","weekdayMon":"Mon","weekdayTue":"Tue","weekdayWed":"Wed","weekdayThu":"Thu","weekdayFri":"Fri","weekdaySat":"Sat"},"sysStatus":{"systemOverview":"System runtime overview","healthHealthy":"Running normally","healthChecking":"Checking status","healthAttention":"Status unavailable","greetingMorning":"Good morning, welcome back","greetingNoon":"Good afternoon, stay in the flow","greetingAfternoon":"Good afternoon, hope work goes smoothly","greetingEvening":"Good evening, thanks for your work today","greetingLateNight":"It\'s late, remember to take a break","summaryChecking":"Connecting to system services and reading the latest index information…","summaryUnavailable":"System status is temporarily unavailable. Check the connection or refresh again later.","summaryEmpty":"The system is responding normally and the index service is ready for the first upload.","summaryIndexed":"The system is responding normally with {files} indexed files.","summaryHealthy":"The system is responding normally with {files} indexed files across {channels} upload channels.","localTime":"Local Time","localTimezone":"Local timezone","totalFiles":"Total Files","clickToRefresh":"Click to refresh","indexUpdateTime":"Index Update Time","systemVersion":"System Version","clickToViewChangelog":"Click to view changelog","channelDistribution":"Upload Channel Distribution","fileStatusDistribution":"File Status Distribution","uploadTrend":"Upload Trend","uploadTrendGroupBy":"Upload trend group by","totalUploads":"Total Uploads","byChannelType":"Channel Type","byChannelName":"Channel Name","selectDateRange":"Select date range","otherChannels":"Other","uploadsUnit":"uploads","noData":"No data","totalFilesLabel":"Total Files","statusTypes":"Status Types","systemMaintenance":"System Maintenance","rebuildIndex":"Rebuild Index","rebuilding":"Rebuilding...","rebuildTooltip":"Rescan all files and update index data, useful for fixing data inconsistencies","backupData":"Backup Data","backingUp":"Backing up...","backupTooltip":"Backup all file metadata and system settings to a JSON file","restoreData":"Restore Data","restoring":"Restoring...","restoreTooltip":"Restore data from a backup file, this will overwrite existing file metadata and system settings","cancelOperation":"Cancel Operation","retry":"Retry","close":"Close","records":"records","aboutToComplete":"Almost done","seconds":"~{count} seconds","minutes":"~{count} minutes","hoursMinutes":"~{hours} hours {minutes} minutes","phaseFetching":"Fetching data","phaseSorting":"Sorting","phaseUploading":"Uploading","phaseFinalizing":"Finalizing","phaseBuilding":"Building backup","phaseDownloading":"Generating download","phaseRestoringFiles":"Restoring files","phaseRestoringSettings":"Restoring settings","phaseCompleted":"Completed","phaseRetrying":"Retrying","rebuildSuccess":"Index rebuild complete! Processed {count} files","backupSuccess":"Backup complete! Backed up {count} files","backupSuccessWithSettings":"Backup complete! Backed up {fileCount} files and {settingsCount} settings","operationInProgress":"An operation is already in progress","selectJsonFile":"Please select a JSON backup file","restoreConfirmMessage":"Restoring will overwrite existing file metadata and system settings. This cannot be undone. Continue?","restoreConfirmTitle":"Confirm Restore","restoreConfirmOk":"Confirm Restore","restoreConfirmCancel":"Cancel","invalidBackupFile":"Invalid backup file format, please select a valid JSON file","restoreSuccess":"Restore complete! Restored {files} files and {settings} settings, rebuilding index...","restoreFailed":"Failed to restore data","fetchIndexFailed":"Failed to fetch index information","unknown":"Unknown","blocked":"Blocked","normalStatus":"Normal","latestUpload":"Latest Upload","earliestUpload":"Earliest Upload","daysAgo":"{count} days ago","hoursAgo":"{count} hours ago","minutesAgo":"{count} minutes ago","justNow":"Just now","cancellingRebuild":"Cancelling index rebuild..."},"sysUpload":{"title":"Upload Channel Management","titleTooltip":"Manage all upload channel configurations. Click a card to view details or edit","filterPlaceholder":"Filter channel type","addChannel":"Add Channel","loadBalance":"Load Balance","unnamedChannel":"Unnamed Channel","envVariable":"Environment Variable","noChannels":"No {type} channels","detail":"Detail","editBtn":"Edit","deleteBtn":"Delete","addDialogTitle":"Add New Channel","channelTypeLabel":"Channel Type","channelTypePlaceholder":"Select channel type","channelNameLabel":"Channel Name","channelNamePlaceholder":"Enter channel name","channelNameImmutableTip":"After creation, this becomes the unique identifier for files associated with the channel and cannot be changed","channelNameEditDisabledTip":"The channel name links uploaded files to this channel and cannot be changed","botTokenLabel":"Bot Token","botTokenPlaceholder":"Enter Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"Enter Chat ID","proxyDomain":"Proxy Domain","proxyDomainPlaceholder":"Optional, e.g.: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"e.g.: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN Domain","cdnDomainPlaceholder":"Optional. Enter the full CDN URL prefix, e.g. https://cdn.example.com","cdnDomainTip":"Optional. Can be used to generate and display file access links. Server-side file reads also try the CDN first.","bucketName":"Bucket Name","bucketNamePlaceholder":"Enter bucket name","bucketRegion":"Bucket Region","bucketRegionPlaceholder":"Default: auto","accessKeyId":"Access Key ID","accessKeyIdPlaceholder":"Enter Access Key ID","secretAccessKey":"Secret Access Key","secretAccessKeyPlaceholder":"Enter Secret Access Key","pathStyle":"Path Style","pathStyleTip":"Enable when using services incompatible with host-style like OpenList","quotaLimit":"Quota Limit","quotaLimitGB":"Quota Limit (GB)","quotaThreshold":"Disable Threshold (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"Enter Channel ID","nitroMember":"Nitro Member","nitroTip":"Nitro members: 25MB per file, otherwise 10MB","discordWarning":"Discord has API rate limits, not recommended for high-concurrency scenarios","repoName":"Repository Name","repoNamePlaceholder":"Format: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"Enter Access Token","privateRepo":"Private Repository","privateRepoTip":"Private repository limit: 100GB","webdavBaseUrl":"WebDAV Base URL","webdavBaseUrlPlaceholder":"e.g.: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"Username","webdavUsernamePlaceholder":"Optional username","webdavPassword":"Password","webdavPasswordPlaceholder":"Optional password","webdavPublicUrlPlaceholder":"Optional. Enter the full public URL prefix, e.g. https://cdn.example.com/imgbed","webdavPublicUrlTip":"Optional. Server-side file reads try this public URL first and fall back to the WebDAV API on failure.","webdavHeaders":"Custom Headers","webdavHeadersPlaceholder":"Optional JSON object, e.g.: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"Custom headers must be a valid JSON object","webdavCreateDirectory":"Auto Create Directories","webdavCreateDirectoryTip":"Create parent directories before uploading files","cancel":"Cancel","confirmAdd":"Confirm Add","detailDialogTitle":"Channel Details - {name}","channelNameDetail":"Channel Name","channelTypeDetail":"Channel Type","statusLabel":"Status","enabled":"Enabled","disabled":"Disabled","configSource":"Config Source","publicUrl":"Public Access URL","notSet":"Not Set","isPathStyle":"Yes","isNotPathStyle":"No","currentUsage":"Current Usage","closeBtn":"Close","editDialogTitle":"Edit Channel - {name}","enableChannel":"Enable Channel","saveChanges":"Save Changes","r2ConfigNote":"Please follow the R2 Channel Configuration documentation to add R2 channels","reservedName":"This name is reserved by the system, please use another name","duplicateName":"A channel with this name already exists, please use another name","fixedChannelCannotDelete":"Channels configured via environment variables cannot be deleted","deleteChannelConfirm":"Are you sure you want to delete this channel? Files still associated with it may become inaccessible.","quotaInitConfirm":"First time enabling quota requires calculating existing file sizes, this may take some time. Calculate now?","quotaInitTitle":"Initialize Quota Statistics","quotaInitConfirmBtn":"Calculate Now","quotaInitCancelBtn":"Calculate Later","quotaInitLater":"You can click the refresh button to calculate later","quotaCalculating":"Calculating quota, please wait...","quotaCalculateSuccess":"Quota calculation complete","quotaCalculateFailed":"Calculation failed","quotaCalculateError":"Calculation failed: "},"sysSecurity":{"authManagement":"Authentication Management","userAuth":"User Authentication","adminAuth":"Admin Authentication","uploadPassword":"Upload Password","confirmPassword":"Confirm Password","adminUsername":"Username","adminPassword":"Password","apiTokenManagement":"API Token Management","imageReview":"Image Review","imageReviewTooltip":"Only applies to non-chunked uploads, supports nsfwjs and moderatecontent.com channels","enableReview":"Enable Review","reviewChannel":"Review Channel","reviewChannelPlaceholder":"Select review channel","apiKey":"API Key","apiPath":"API Path","ipQuery":"IP Geolocation Query","ipQueryTooltip":"Calls a custom API during upload to query the upload IP location. Parameter values support the {\'{ip}\'} placeholder","enableIpQuery":"Enable Query","ipQueryChannel":"Query Channel","ipQueryChannelPlaceholder":"Select query channel","customApi":"Custom API","queryParams":"Query Parameters","paramNamePlaceholder":"Parameter name","paramValuePlaceholder":"Parameter value, e.g. {\'{ip}\'}","addQueryParam":"Add Parameter","responseFields":"Response Fields","responseFieldsTip":"The final display text is joined in field order","responseFieldPathPlaceholder":"JSON path, e.g. country.name","addResponseField":"Add Field","uploadManagement":"Upload Management","accessManagement":"Access Management","domainFilter":"Domain Filter","allowedDomains":"Allowed Domains","allowedDomainsTooltip":"1. Set permissions based on access domain
2. Leave empty to allow all, separate multiple domains with commas","whiteListMode":"Whitelist Mode","enableWhiteList":"Enable","enableWhiteListTooltip":"1. Set permissions based on files
2. When enabled, only whitelisted files can be accessed","imageTransform":"Image Resizing","enableImageTransform":"Enable","enableImageTransformTooltip":"Allows the file endpoint to process images using width, height, and fit parameters","imageTransformAllowedSizes":"Allowed Sizes","imageTransformAllowedSizesPlaceholder":"For example: 320xauto,640xauto,1280x720","imageTransformAllowedSizesHint":"Leave empty to allow any valid size
Separate entries with commas and use auto for an unrestricted dimension","imageTransformAllowedSizesInvalid":"Invalid size format. Use 320xauto, autox480, or 1280x720; each dimension is limited to 4096","settingsSaved":"Settings saved","tokenName":"Name","tokenValue":"Token","permissions":"Permissions","createdAt":"Created At","status":"Status","expiresAt":"Expires At","operation":"Actions","editBtn":"Edit","deleteBtn":"Delete","permUpload":"Upload","permDelete":"Delete","permList":"List","permManage":"Manage","createTokenTitle":"Create New API Token","tokenNameLabel":"Token Name","tokenNamePlaceholder":"Enter token name","permissionsLabel":"Permissions","neverExpire":"Never Expire","validPeriod":"Valid Period","autoDeleteOnExpire":"Auto-delete on expiry","createBtn":"Create","editTokenTitle":"Edit API Token","updateBtn":"Update","tokenCreatedTitle":"Token Created Successfully","tokenCreatedWarning":"Please save the following token. You won\'t be able to view the full token after closing this dialog!","fullToken":"Full Token","copyBtn":"Copy","savedBtn":"I\'ve Saved It","tokenCopied":"Token copied to clipboard","copyFailed":"Copy failed, please copy manually","tokenCreateSuccess":"Token created successfully","tokenCreateFailed":"Failed to create token","tokenUpdateSuccess":"Token updated successfully","tokenUpdateFailed":"Failed to update token","tokenDeleteConfirm":"This will permanently delete this token. Continue?","tokenDeleteConfirmTitle":"Notice","tokenDeleteConfirmOk":"OK","tokenDeleteConfirmCancel":"Cancel","tokenDeleteSuccess":"Token deleted successfully","tokenDeleteFailed":"Failed to delete token","tokenListFailed":"Failed to fetch token list","passwordUrlReserved":"Password cannot contain URL reserved characters: % & ? # /","confirmUploadPassword":"Please re-enter upload password","confirmAdminPassword":"Please re-enter admin password","passwordMismatch":"Passwords do not match","passwordUnchanged":"Unchanged (leave empty to keep current password)","adminPasswordChangedRelogin":"Admin password changed, redirecting to login page","clearPassword":"Clear authentication info","tokenNameRequired":"Please enter token name","permissionsRequired":"Please select permissions","validPeriodRequired":"Valid period must be greater than 0","timeUnitSeconds":"seconds","timeUnitMinutes":"minutes","timeUnitHours":"hours","timeUnitDays":"days","timeUnitMonths":"months","timeUnitYears":"years","sessionSecurityPolicy":"Session Security Policy","secureMode":"Secure Mode","secureModeTooltip":"When enabled, cookies are only transmitted over HTTPS. Make sure your site has HTTPS enabled","userSessionMaxAge":"User Session Max Age","adminSessionMaxAge":"Admin Session Max Age","sessionMaxAgeUnit":"days","sessionMaxAgeInvalid":"Session max age must be an integer from 1 to 3650"},"sysPage":{"settingsSaved":"Settings saved","refreshAnnouncement":"Reset announcement read status","otherSettings":"Other Settings","channelSelectPlaceholder":"Please select upload channel first"},"sysOthers":{"remoteTelemetry":"Remote Telemetry","remoteTelemetryTooltip":"Helps with issue tracking and debugging, recommended to enable","enable":"Enable","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"When set, backend operations like blocking and deleting won\'t be affected by CDN cache
Recommended, see documentation for setup","zoneId":"Zone ID","accountEmail":"Account Email","randomImageApi":"Random Image API","randomImageApiTooltip":"See documentation for API usage details","directory":"Directory","directoryTooltip":"1. Directories with random image access, defaults to root. Separate multiple directories with commas
2. All directories use absolute paths, e.g. /img/cover, meaning files in this directory and all subdirectories can be accessed by the random image API","publicBrowse":"Public Gallery","publicBrowseTooltip":"When enabled, visitors can browse images in specified directories via /browse path (read-only, no delete/move)","openDirectory":"Open Directory","openDirectoryTooltip":"

Directories open for public browsing, separate multiple with commas

Example: wallpaper,photos,album

Supports subdirectories: 2026/lucky,2026/rich

Access URL: https://your.domain/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"When enabled, images can be accessed and managed via WebDAV protocol","webdavUsername":"Username","webdavPassword":"Password","webdavUploadChannel":"Upload Channel","webdavDefaultChannel":"Default Channel","webdavChannelName":"Specified Channel","settingsSaved":"Settings saved"},"customerConfig":{"uploadFileList":"Upload File List","fileNameCol":"File Name","filePreview":"File Preview","uploadTimeCol":"Upload Time","ipAddress":"IP Address","address":"Address","uploadCount":"Upload Count","allowUpload":"Allow Upload","allow":"Allow","deny":"Deny","loadMore":"Load More","loadError":"Error loading more data, please check network connection","syncError":"Error syncing data, please check network connection"},"publicBrowse":{"searchPlaceholder":"Search file name or #page","fileCount":"{count} files","loading":"Loading...","retry":"Retry","creditText":"Gallery code contributed by LinJiang","loadingMore":"Loading...","allLoaded":"All loaded","creditLink":"LinJiang","browseDisabled":"Public browsing is not enabled","directoryNotAllowed":"This directory is not open for public access","accessDenied":"Access denied","loadFailed":"Load failed, please retry","rootDirectory":"Root","copyLink":"Copy Link","copied":"Copied","downloadBtn":"Download","swipeHint":"← Swipe to navigate →","rotate90":"Rotate 90°"},"transformMedia":{"download":"Download","playbackSpeed":"Playback Speed","normalSpeed":"Normal","playMode":"Play Mode","stopAfterPlay":"Stop After Play","sequentialPlay":"Sequential Play","loopSingle":"Loop Single","more":"More"},"directoryTree":{"selectDirectory":"Select Directory","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadFailed":"Failed to load directory tree, please check network connection"},"floatingSave":{"saving":"Saving","save":"Save"},"theme":{"lightMode":"Light Mode","darkMode":"Dark Mode","autoMode":"Auto Mode"},"common":{"confirm":"OK","cancel":"Cancel","close":"Close","save":"Save","delete":"Delete","edit":"Edit","copy":"Copy","download":"Download","retry":"Retry","loading":"Loading...","success":"Success","failed":"Failed","warning":"Warning","info":"Notice","yes":"Yes","no":"No","all":"All Types","select":"Select"},"validation":{"pathMustStartWithSlash":"Path must start with \\"/\\"","pathTraversalNotAllowed":"Path cannot contain \\"..\\"","singleDotNotAllowed":"Path cannot contain standalone \\".\\"","consecutiveSlashNotAllowed":"Path cannot contain consecutive slashes","invalidCharacters":"Path contains invalid characters, please use a valid path format","uploadDirReplace":"Upload directory"},"language":{"switchTo":"中/En","switchLanguage":"Switch Language"},"whitelist":{"title":"Whitelist Mode Enabled","description":"Sorry, the whitelist mode is currently enabled. Uploaded images need to be approved before they can be displayed. Please wait for approval.","goHome":"Go Home","goBack":"Go Back","helpText":"You can try:","uploadImage":"Upload Image","refreshPage":"Refresh Page"}}');const i="app-locale",r="zh-CN",s=new Set(["zh-CN","en"]);function d(e){return s.has(e)?e:null}function c(){return d(localStorage.getItem(i))}function u(e){return c()||d(e)||r}const m=(0,o.hU)({legacy:!0,locale:c()||r,fallbackLocale:r,messages:{"zh-CN":n,en:l}});function p(e){m.global.locale=e,document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}function h(e){const a=u(e);return p(a),a}function g(e){const a=d(e)||r;p(a),localStorage.setItem(i,a)}var f=m},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(16571),i=(t(15412),t(30372),t(98950)),r=t(30292),s=t(47984),d=t(79262),c=t(70193),u=t(55363),m=t(31050),p=t(22909),h=t(10220),g=t(74036),f=t(90389),y=t(81828),b=t(27483),C=t(66806),k=t(61536),T=t(3263),w=t(57038),v=t(63416),S=t(63027),F=t(19223),P=t(93422),A=t(16249),D=t(34335),L=t(14722),U=t(16829),N=t(53916),M=t(48749),I=t(2511),x=t(12375),R=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),z=t(18422),H=t(17214),V=t(44845),j=t(55319),K=t(71669),Q=t(38557),G=t(15925),J=t(10798),_=t(39329),Y=t(59708),X=t(41165),$=t(50230),Z=t(99288),ee=t(67992),ae=t(37538),te=t(13118),oe=t(36050),ne=t(69721),le=t(75192),ie=t(50672),re=t(3149),se=t(11221),de=t(73585),ce=t(63236),ue=t(1860),me=t(13110),pe=t(6246),he=t(42302),ge=t(75504),fe=t(40587),ye=t(5299),be=t(81775),Ce=t(13127),ke=t(18742),Te=t(97579),we=t(56746),ve=t(58422),Se=t(20444),Fe=t(88502),Pe=t(21872),Ae=t(64795),De=t(82262),Le=t(88921),Ue=t(39916),Ne=t(18579),Me=t(80500),Ie=t(58428),xe=t(87849),Re=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),ze=t(70577),He=t(93212),Ve=t(40275),je=t(52995),Ke=t(38410),Qe=t(167),Ge=t(53223),Je=t(97447),_e=t(67830),Ye=[u.rC,m.UH,p.B0,h.Ce,g.IN,s.xK,f.Df,y.ck,b.LB,C.e4,k.ok,T.$F,w.gK,v.e6,S.rQ,F.Jt,P.Wz,A.Xk,D.B2,L.a$,U.jB,d.ZD,N.wF,M.rO,I.jT,x.Xb,R.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,z.cb,H.MT,V.vH,j.v,K.bx,Q.tU,G.zp,J.A,_.pS,Y.A4,X.h8,$.o1,Z.UD,ee.mR,ae.ao,te.Uj,oe.gD,ne.Bw,le.CY,ie.In,re.v0,se.lS,de.jb,ce.yv,ue.Up,me.iW,pe.CQ,he.IT,ge.EZ,fe.xb,ye.PJ,be.X,Ce.ji,ke.is,Te.R9,we.QL,ve.wR,Se.oE,Fe.ye,Pe.UB,Ae.hS,De.Mj,Le.D6,Ue.QO,Ne.V2,Me.im,Ie.Gx,xe.H9,Re.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,ze.xi,He._2,Ve.DX,je.l9,Ke.GR,Qe.ns,Ge.Be,Je.Jm,_e.Mc],Xe=t(97722),$e=(t(85331),t(10961),t(56768));function Ze(e,a,t,o,n,l){const i=(0,$e.g2)("router-view"),r=Xe.H6;return(0,$e.uX)(),(0,$e.Wv)(r,{locale:l.elementLocale},{default:(0,$e.k6)(()=>[(0,$e.bF)(i)]),_:1},8,["locale"])}var ea=t(60782),aa=t(6166),ta=t(55186),oa=t(54791),na={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,ea.L8)(["userConfig","useDarkMode"]),elementLocale(){return"zh-CN"===this.$i18n.locale?ta.A:oa.A}},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(aa.ae.valid(document.body))return void(this.osInstance=(0,aa.ae)(document.body));this.osInstance=(0,aa.ae)(document.body,{scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"scroll",autoHideDelay:600,dragScroll:!0,clickScroll:!0},overflow:{x:"hidden",y:"scroll"}}),console.log("OverlayScrollbars initialized successfully")}catch(e){console.error("Failed to initialize OverlayScrollbars:",e)}},setupImageViewerObserver(){this.imageViewerObserver=new MutationObserver(e=>{const a=document.querySelector(".el-image-viewer__wrapper");a?this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"hidden"}}):this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"scroll"}})}),this.imageViewerObserver.observe(document.body,{childList:!0,subtree:!0})}}},la=t(71241);const ia=(0,la.A)(na,[["render",Ze]]);var ra=ia,sa=t(16915),da=t(25507),ca=t(46638),ua=t(57477);t(21862),t(50635);i.Yv.add(...Ye);const ma=(0,o.Ef)(ra),pa=(0,n.Zf)();ma.component("font-awesome-icon",r.gc);for(const[ba,Ca]of Object.entries(ua))ma.component(ba,Ca);const ha=()=>{const e=document.documentElement;let a;if(da.A.state.cusDarkMode&&null!==da.A.state.useDarkMode)a=da.A.state.useDarkMode;else{if(a=window.matchMedia("(prefers-color-scheme: dark)").matches,!a){const e=new Date,t=e.getHours();a=t>=22||t<6}da.A.commit("setUseDarkMode",a)}a?e.classList.add("dark"):e.classList.remove("dark")},ga=e=>{const a=document.documentElement;e?a.classList.add("dark"):a.classList.remove("dark")},fa=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},ya=(e,a)=>{const t=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');t.forEach(e=>e.remove());const o=document.createElement("link"),n=document.createElement("link"),l=document.createElement("link");o.rel="icon",n.rel="apple-touch-icon",l.rel="mask-icon",e?(o.href=a?.siteIcon||"/static/media/logo-dark.png",n.href=a?.siteIcon||"/static/media/logo-dark.png",l.href=a?.siteIcon||"/static/media/logo-dark.png"):(o.href=a?.siteIcon||"/static/media/logo.png",n.href=a?.siteIcon||"/static/media/logo.png",l.href=a?.siteIcon||"/static/media/logo.png"),document.head.appendChild(o),document.head.appendChild(n),document.head.appendChild(l)};da.A.dispatch("fetchUserConfig").then(()=>{(0,ca.BY)(da.A.getters.userConfig?.defaultLanguage),ha(),fa(da.A.getters.userConfig),ya(da.A.state.useDarkMode,da.A.getters.userConfig),da.A.subscribe((e,a)=>{"setUseDarkMode"===e.type&&da.A.state.cusDarkMode&&(ga(a.useDarkMode),ya(a.useDarkMode,da.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(ha(),ya(da.A.state.useDarkMode,da.A.getters.userConfig))}),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),(0,ca.BY)(),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).use(pa).mount("#app")})}},a={};function t(o){var n=a[o];if(void 0!==n)return n.exports;var l=a[o]={exports:{}};return e[o].call(l.exports,l,l.exports,t),l.exports}t.m=e,function(){var e=[];t.O=function(a,o,n,l){if(!o){var i=1/0;for(c=0;c=l)&&Object.keys(t.O).every(function(e){return t.O[e](o[s])})?o.splice(s--,1):(r=!1,l0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[o,n,l]}}(),function(){t.n=function(e){var a=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(a,{a:a}),a}}(),function(){t.d=function(e,a){for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce(function(a,o){return t.f[o](e,a),a},[]))}}(),function(){t.u=function(e){return"js/"+e+"."+{206:"3ad66e7c",223:"73628f82",380:"3d87f1cb",385:"4d3f7ac7",437:"fa57fedd",540:"8854b4d5",609:"3a7a8c93",711:"936a7109",746:"d9b50432",757:"27c783c1",773:"f0780366",787:"d0dbc2dd",903:"1e4b549d"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{173:"36158ceb",206:"e53da0eb",223:"6b74609d",385:"4f25fc20",437:"391209f6",473:"f3f669e8",581:"e91379d5",609:"e5e9e058",711:"1a30de22",746:"e53da0eb",757:"86e23e04",773:"147d098d",787:"448a9124"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)}}(),function(){var e={},a="sanyue_imghub:";t.l=function(o,n,l,i){if(e[o])e[o].push(n);else{var r,s;if(void 0!==l)for(var d=document.getElementsByTagName("script"),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 a+vz$@Tu=J;x7yyx{r>@8JYb}SJpllvM;8VF literal 0 HcmV?d00001 diff --git a/frontend-dist/js/app.9b801598.js.map b/frontend-dist/js/app.d9dc13a4.js.map similarity index 76% rename from frontend-dist/js/app.9b801598.js.map rename to frontend-dist/js/app.d9dc13a4.js.map index bd83dda..bf60979 100644 --- a/frontend-dist/js/app.9b801598.js.map +++ b/frontend-dist/js/app.d9dc13a4.js.map @@ -1 +1 @@ -{"version":3,"file":"js/app.9b801598.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/utils/axios.js","webpack://sanyue_imghub/./src/router/index.js","webpack://sanyue_imghub/./src/store/index.js","webpack://sanyue_imghub/./src/locales/index.js","webpack://sanyue_imghub/./src/utils/fontawesomeIcons.js","webpack://sanyue_imghub/./src/App.vue?83ca","webpack://sanyue_imghub/./src/App.vue","webpack://sanyue_imghub/./src/App.vue?a135","webpack://sanyue_imghub/./src/main.js","webpack://sanyue_imghub/webpack/bootstrap","webpack://sanyue_imghub/webpack/runtime/chunk loaded","webpack://sanyue_imghub/webpack/runtime/compat get default export","webpack://sanyue_imghub/webpack/runtime/define property getters","webpack://sanyue_imghub/webpack/runtime/ensure chunk","webpack://sanyue_imghub/webpack/runtime/get javascript chunk filename","webpack://sanyue_imghub/webpack/runtime/get mini-css chunk filename","webpack://sanyue_imghub/webpack/runtime/global","webpack://sanyue_imghub/webpack/runtime/hasOwnProperty shorthand","webpack://sanyue_imghub/webpack/runtime/load script","webpack://sanyue_imghub/webpack/runtime/make namespace object","webpack://sanyue_imghub/webpack/runtime/publicPath","webpack://sanyue_imghub/webpack/runtime/css loading","webpack://sanyue_imghub/webpack/runtime/jsonp chunk loading","webpack://sanyue_imghub/webpack/startup"],"sourcesContent":["import axios from 'axios';\r\n\r\n// 创建axios实例\r\nconst instance = axios.create({\r\n baseURL: process.env.NODE_ENV === 'production' ? '/' : '/api',\r\n withCredentials: true, // 始终携带 Cookie(HttpOnly session cookie)\r\n});\r\n\r\nexport default instance;\r\n","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport store from '../store'\r\nimport axios from '@/utils/axios'\r\nimport i18n from '@/locales'\r\n\r\n// 通用的管理员认证守卫\r\nconst adminAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要管理端认证,直接放行\r\n if (!data.adminRequired) {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效的 admin session\r\n if (data.valid && data.authType === 'admin') {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要用户端认证,直接放行\r\n if (!data.userRequired) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效 session(user 或 admin 都可以)\r\n if (data.valid) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'home',\r\n component: () => import('../views/UploadHome.vue'),\r\n beforeEnter: userAuthGuard\r\n },\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: () => import('../views/Login.vue')\r\n },\r\n {\r\n path: '/dashboard',\r\n name: 'dashboard',\r\n component: () => import('../views/AdminDashBoard.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/customerConfig',\r\n name: 'customerConfig',\r\n component: () => import('../views/CustomerConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/systemConfig',\r\n name: 'systemConfig',\r\n component: () => import('../views/SystemConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/adminLogin',\r\n name: 'adminLogin',\r\n component: () => import('../views/AdminLogin.vue'),\r\n },\r\n {\r\n path: '/blockimg',\r\n name: 'blockimg',\r\n component: () => import('../views/BlockImage.vue'),\r\n },\r\n {\r\n path: '/whiteliston',\r\n name: 'whiteliston',\r\n component: () => import('../views/WhiteListOn.vue'),\r\n },\r\n {\r\n path: '/browse/:dir*',\r\n name: 'publicBrowse',\r\n component: () => import('../views/PublicBrowse.vue'),\r\n },\r\n {\r\n path: '/:pathMatch(.*)*',\r\n name: 'notFound',\r\n component: () => import('../views/NotFound.vue'),\r\n },\r\n]\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(process.env.BASE_URL),\r\n routes\r\n})\r\n\r\nexport default router\r\n","import { createStore } from 'vuex'\r\nimport axios from '@/utils/axios';\r\nimport createPersistedState from 'vuex-persistedstate';\r\n\r\nexport default createStore({\r\n state: {\r\n userConfig: null,\r\n bingWallPapers: [],\r\n // 会话状态标记(不存储密码,实际认证通过 HttpOnly Cookie)\r\n adminLoggedIn: false,\r\n userLoggedIn: false,\r\n uploadMethod: 'default',\r\n uploadCopyUrlForm: '',\r\n compressConfig: {\r\n customerCompress: undefined,\r\n compressQuality: undefined,\r\n compressBar: undefined,\r\n serverCompress: undefined,\r\n convertToWebp: undefined,\r\n },\r\n storeUploadChannel: '',\r\n storeChannelName: null, // 指定的渠道名称,null表示从未选择,''表示用户主动清空\r\n storeAutoRetry: true,\r\n storeUploadNameType: '',\r\n uploadFolder: '',\r\n customUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n adminUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n autoReUpload: true,\r\n // 深色模式\r\n useDarkMode: null,\r\n cusDarkMode: false,\r\n },\r\n getters: {\r\n userConfig: state => state.userConfig,\r\n bingWallPapers: state => state.bingWallPapers,\r\n adminLoggedIn: state => state.adminLoggedIn,\r\n userLoggedIn: state => state.userLoggedIn,\r\n storeUploadMethod: state => state.uploadMethod,\r\n uploadCopyUrlForm: state => state.uploadCopyUrlForm,\r\n compressConfig: state => state.compressConfig,\r\n storeUploadChannel: state => state.storeUploadChannel,\r\n storeChannelName: state => state.storeChannelName,\r\n storeUploadNameType: state => state.storeUploadNameType,\r\n customUrlSettings: state => state.customUrlSettings,\r\n storeAutoRetry: state => state.storeAutoRetry,\r\n adminUrlSettings: state => state.adminUrlSettings,\r\n storeUploadFolder: (state) => {\r\n return state.uploadFolder || localStorage.getItem('uploadFolder') || ''\r\n },\r\n useDarkMode: state => state.useDarkMode,\r\n cusDarkMode: state => state.cusDarkMode,\r\n storeAutoReUpload: state => state.autoReUpload,\r\n },\r\n mutations: {\r\n setUserConfig(state, userConfig) {\r\n state.userConfig = userConfig;\r\n },\r\n setBingWallPapers(state, bingWallPapers) {\r\n state.bingWallPapers = bingWallPapers;\r\n },\r\n setAdminLoggedIn(state, loggedIn) {\r\n state.adminLoggedIn = loggedIn;\r\n },\r\n setUserLoggedIn(state, loggedIn) {\r\n state.userLoggedIn = loggedIn;\r\n },\r\n setUploadMethod(state, uploadMethod) {\r\n state.uploadMethod = uploadMethod;\r\n },\r\n setUploadCopyUrlForm(state, uploadCopyUrlForm) {\r\n state.uploadCopyUrlForm = uploadCopyUrlForm;\r\n },\r\n setCompressConfig(state, { key, value }) {\r\n state.compressConfig[key] = value;\r\n },\r\n setStoreUploadChannel(state, uploadChannel) {\r\n state.storeUploadChannel = uploadChannel;\r\n },\r\n setStoreChannelName(state, channelName) {\r\n state.storeChannelName = channelName;\r\n },\r\n setStoreUploadNameType(state, storeUploadNameType) {\r\n state.storeUploadNameType = storeUploadNameType;\r\n },\r\n setCustomUrlSettings(state, { key, value }) {\r\n state.customUrlSettings[key] = value;\r\n },\r\n setStoreAutoRetry(state, storeAutoRetry) {\r\n state.storeAutoRetry = storeAutoRetry;\r\n },\r\n setAdminUrlSettings(state, { key, value }) {\r\n state.adminUrlSettings[key] = value;\r\n },\r\n setUseDarkMode(state, useDarkMode) {\r\n state.useDarkMode = useDarkMode;\r\n },\r\n setCusDarkMode(state, cusDarkMode) {\r\n state.cusDarkMode = cusDarkMode;\r\n },\r\n setStoreUploadFolder(state, folder) {\r\n state.uploadFolder = folder\r\n localStorage.setItem('uploadFolder', folder)\r\n },\r\n setStoreAutoReUpload(state, autoReUpload) {\r\n state.autoReUpload = autoReUpload;\r\n }\r\n },\r\n actions: {\r\n async fetchUserConfig({ commit }) {\r\n try {\r\n const response = await axios.get('/api/userConfig');\r\n commit('setUserConfig', response.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n async fetchBingWallPapers({ commit }) {\r\n try {\r\n const response = await axios.get('/api/bing/wallpaper');\r\n const wallpapers = response.data.data;\r\n const bingWallPapers = wallpapers.map(wallpaper => {\r\n return {\r\n url: 'https://www.bing.com' + wallpaper.url,\r\n };\r\n }\r\n );\r\n\r\n //预加载图片,阻塞直到图片加载完成\r\n await Promise.all(bingWallPapers.map(wallpaper => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = resolve;\r\n img.onerror = reject;\r\n img.src = wallpaper.url;\r\n });\r\n }));\r\n commit('setBingWallPapers', bingWallPapers);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n },\r\n modules: {\r\n },\r\n plugins: [createPersistedState({\r\n // 只持久化非敏感数据,不持久化认证状态\r\n paths: [\r\n 'userConfig',\r\n 'uploadMethod',\r\n 'uploadCopyUrlForm',\r\n 'compressConfig',\r\n 'storeUploadChannel',\r\n 'storeChannelName',\r\n 'storeAutoRetry',\r\n 'storeUploadNameType',\r\n 'uploadFolder',\r\n 'customUrlSettings',\r\n 'adminUrlSettings',\r\n 'autoReUpload',\r\n 'useDarkMode',\r\n 'cusDarkMode',\r\n ]\r\n })]\r\n})\r\n","import { createI18n } from 'vue-i18n'\r\nimport zhCN from './zh-CN.json'\r\nimport en from './en.json'\r\n\r\nconst LOCALE_KEY = 'app-locale'\r\nconst FALLBACK_LOCALE = 'zh-CN'\r\nconst SUPPORTED_LOCALES = new Set(['zh-CN', 'en'])\r\n\r\nfunction normalizeLocale(locale) {\r\n return SUPPORTED_LOCALES.has(locale) ? locale : null\r\n}\r\n\r\nfunction getStoredLocale() {\r\n return normalizeLocale(localStorage.getItem(LOCALE_KEY))\r\n}\r\n\r\nexport function resolveInitialLocale(defaultLocale) {\r\n return getStoredLocale() || normalizeLocale(defaultLocale) || FALLBACK_LOCALE\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale() || FALLBACK_LOCALE,\r\n fallbackLocale: FALLBACK_LOCALE,\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nfunction applyLocale(locale) {\r\n i18n.global.locale = locale\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\r\n}\r\n\r\nexport function initializeLocale(defaultLocale) {\r\n const locale = resolveInitialLocale(defaultLocale)\r\n applyLocale(locale)\r\n return locale\r\n}\r\n\r\nexport function setLocale(locale) {\r\n const normalizedLocale = normalizeLocale(locale) || FALLBACK_LOCALE\r\n applyLocale(normalizedLocale)\r\n localStorage.setItem(LOCALE_KEY, normalizedLocale)\r\n}\r\n\r\nexport { LOCALE_KEY, getStoredLocale }\r\nexport default i18n\r\n","import { faAws } from '@fortawesome/free-brands-svg-icons/faAws';\r\nimport { faCloudflare } from '@fortawesome/free-brands-svg-icons/faCloudflare';\r\nimport { faDiscord } from '@fortawesome/free-brands-svg-icons/faDiscord';\r\nimport { faAngleDoubleLeft } from '@fortawesome/free-solid-svg-icons/faAngleDoubleLeft';\r\nimport { faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons/faAngleDoubleRight';\r\nimport { faArrowDown } from '@fortawesome/free-solid-svg-icons/faArrowDown';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons/faArrowLeft';\r\nimport { faArrowUp } from '@fortawesome/free-solid-svg-icons/faArrowUp';\r\nimport { faBan } from '@fortawesome/free-solid-svg-icons/faBan';\r\nimport { faBars } from '@fortawesome/free-solid-svg-icons/faBars';\r\nimport { faBook } from '@fortawesome/free-solid-svg-icons/faBook';\r\nimport { faBullhorn } from '@fortawesome/free-solid-svg-icons/faBullhorn';\r\nimport { faCalendar } from '@fortawesome/free-solid-svg-icons/faCalendar';\r\nimport { faChartBar } from '@fortawesome/free-solid-svg-icons/faChartBar';\r\nimport { faChartLine } from '@fortawesome/free-solid-svg-icons/faChartLine';\r\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';\r\nimport { faCheckSquare } from '@fortawesome/free-solid-svg-icons/faCheckSquare';\r\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';\r\nimport { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';\r\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';\r\nimport { faCircleHalfStroke } from '@fortawesome/free-solid-svg-icons/faCircleHalfStroke';\r\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock';\r\nimport { faCloud } from '@fortawesome/free-solid-svg-icons/faCloud';\r\nimport { faCloudUpload } from '@fortawesome/free-solid-svg-icons/faCloudUpload';\r\nimport { faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons/faCloudUploadAlt';\r\nimport { faCode } from '@fortawesome/free-solid-svg-icons/faCode';\r\nimport { faCodeBranch } from '@fortawesome/free-solid-svg-icons/faCodeBranch';\r\nimport { faCog } from '@fortawesome/free-solid-svg-icons/faCog';\r\nimport { faCogs } from '@fortawesome/free-solid-svg-icons/faCogs';\r\nimport { faComments } from '@fortawesome/free-solid-svg-icons/faComments';\r\nimport { faCompressAlt } from '@fortawesome/free-solid-svg-icons/faCompressAlt';\r\nimport { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy';\r\nimport { faDatabase } from '@fortawesome/free-solid-svg-icons/faDatabase';\r\nimport { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload';\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons/faEdit';\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons/faEllipsisH';\r\nimport { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';\r\nimport { faExclamation } from '@fortawesome/free-solid-svg-icons/faExclamation';\r\nimport { faExclamationCircle } from '@fortawesome/free-solid-svg-icons/faExclamationCircle';\r\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons/faExclamationTriangle';\r\nimport { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons/faExternalLinkAlt';\r\nimport { faEye } from '@fortawesome/free-solid-svg-icons/faEye';\r\nimport { faFile } from '@fortawesome/free-solid-svg-icons/faFile';\r\nimport { faFileAlt } from '@fortawesome/free-solid-svg-icons/faFileAlt';\r\nimport { faFileExport } from '@fortawesome/free-solid-svg-icons/faFileExport';\r\nimport { faFileSignature } from '@fortawesome/free-solid-svg-icons/faFileSignature';\r\nimport { faFilter } from '@fortawesome/free-solid-svg-icons/faFilter';\r\nimport { faFolder } from '@fortawesome/free-solid-svg-icons/faFolder';\r\nimport { faFolderOpen } from '@fortawesome/free-solid-svg-icons/faFolderOpen';\r\nimport { faFolderTree } from '@fortawesome/free-solid-svg-icons/faFolderTree';\r\nimport { faGlobe } from '@fortawesome/free-solid-svg-icons/faGlobe';\r\nimport { faHashtag } from '@fortawesome/free-solid-svg-icons/faHashtag';\r\nimport { faHistory } from '@fortawesome/free-solid-svg-icons/faHistory';\r\nimport { faHome } from '@fortawesome/free-solid-svg-icons/faHome';\r\nimport { faICursor } from '@fortawesome/free-solid-svg-icons/faICursor';\r\nimport { faImage } from '@fortawesome/free-solid-svg-icons/faImage';\r\nimport { faImages } from '@fortawesome/free-solid-svg-icons/faImages';\r\nimport { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';\r\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle';\r\nimport { faLink } from '@fortawesome/free-solid-svg-icons/faLink';\r\nimport { faList } from '@fortawesome/free-solid-svg-icons/faList';\r\nimport { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';\r\nimport { faMinusSquare } from '@fortawesome/free-solid-svg-icons/faMinusSquare';\r\nimport { faMoon } from '@fortawesome/free-solid-svg-icons/faMoon';\r\nimport { faMusic } from '@fortawesome/free-solid-svg-icons/faMusic';\r\nimport { faPager } from '@fortawesome/free-solid-svg-icons/faPager';\r\nimport { faPaperPlane } from '@fortawesome/free-solid-svg-icons/faPaperPlane';\r\nimport { faPaste } from '@fortawesome/free-solid-svg-icons/faPaste';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons/faQuestionCircle';\r\nimport { faQuoteRight } from '@fortawesome/free-solid-svg-icons/faQuoteRight';\r\nimport { faRedo } from '@fortawesome/free-solid-svg-icons/faRedo';\r\nimport { faRobot } from '@fortawesome/free-solid-svg-icons/faRobot';\r\nimport { faSave } from '@fortawesome/free-solid-svg-icons/faSave';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons/faSearch';\r\nimport { faServer } from '@fortawesome/free-solid-svg-icons/faServer';\r\nimport { faShareAlt } from '@fortawesome/free-solid-svg-icons/faShareAlt';\r\nimport { faShield } from '@fortawesome/free-solid-svg-icons/faShield';\r\nimport { faShieldAlt } from '@fortawesome/free-solid-svg-icons/faShieldAlt';\r\nimport { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt';\r\nimport { faSortAlphaUp } from '@fortawesome/free-solid-svg-icons/faSortAlphaUp';\r\nimport { faSortAmountDown } from '@fortawesome/free-solid-svg-icons/faSortAmountDown';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons/faSpinner';\r\nimport { faSquare } from '@fortawesome/free-solid-svg-icons/faSquare';\r\nimport { faSun } from '@fortawesome/free-solid-svg-icons/faSun';\r\nimport { faSync } from '@fortawesome/free-solid-svg-icons/faSync';\r\nimport { faSyncAlt } from '@fortawesome/free-solid-svg-icons/faSyncAlt';\r\nimport { faTachometerAlt } from '@fortawesome/free-solid-svg-icons/faTachometerAlt';\r\nimport { faTag } from '@fortawesome/free-solid-svg-icons/faTag';\r\nimport { faTags } from '@fortawesome/free-solid-svg-icons/faTags';\r\nimport { faThLarge } from '@fortawesome/free-solid-svg-icons/faThLarge';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';\r\nimport { faTools } from '@fortawesome/free-solid-svg-icons/faTools';\r\nimport { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt';\r\nimport { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload';\r\nimport { faUserCog } from '@fortawesome/free-solid-svg-icons/faUserCog';\r\n\r\nexport default [\r\n faAngleDoubleLeft,\r\n faAngleDoubleRight,\r\n faArrowDown,\r\n faArrowLeft,\r\n faArrowUp,\r\n faAws,\r\n faBan,\r\n faBars,\r\n faBook,\r\n faBullhorn,\r\n faCalendar,\r\n faChartBar,\r\n faChartLine,\r\n faCheck,\r\n faCheckSquare,\r\n faChevronDown,\r\n faChevronLeft,\r\n faChevronRight,\r\n faCircleHalfStroke,\r\n faClock,\r\n faCloud,\r\n faCloudflare,\r\n faCloudUpload,\r\n faCloudUploadAlt,\r\n faCode,\r\n faCodeBranch,\r\n faCog,\r\n faCogs,\r\n faComments,\r\n faCompressAlt,\r\n faCopy,\r\n faDatabase,\r\n faDiscord,\r\n faDownload,\r\n faEdit,\r\n faEllipsisH,\r\n faEllipsisV,\r\n faExclamation,\r\n faExclamationCircle,\r\n faExclamationTriangle,\r\n faExternalLinkAlt,\r\n faEye,\r\n faFile,\r\n faFileAlt,\r\n faFileExport,\r\n faFileSignature,\r\n faFilter,\r\n faFolder,\r\n faFolderOpen,\r\n faFolderTree,\r\n faGlobe,\r\n faHashtag,\r\n faHistory,\r\n faHome,\r\n faICursor,\r\n faImage,\r\n faImages,\r\n faInbox,\r\n faInfoCircle,\r\n faLink,\r\n faList,\r\n faMinus,\r\n faMinusSquare,\r\n faMoon,\r\n faMusic,\r\n faPager,\r\n faPaperPlane,\r\n faPaste,\r\n faPlus,\r\n faQuestionCircle,\r\n faQuoteRight,\r\n faRedo,\r\n faRobot,\r\n faSave,\r\n faSearch,\r\n faServer,\r\n faShareAlt,\r\n faShield,\r\n faShieldAlt,\r\n faSignOutAlt,\r\n faSortAlphaUp,\r\n faSortAmountDown,\r\n faSpinner,\r\n faSquare,\r\n faSun,\r\n faSync,\r\n faSyncAlt,\r\n faTachometerAlt,\r\n faTag,\r\n faTags,\r\n faThLarge,\r\n faTimes,\r\n faTools,\r\n faTrashAlt,\r\n faUpload,\r\n faUserCog\r\n];\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_router_view = _resolveComponent(\"router-view\");\n const _component_el_config_provider = _resolveComponent(\"el-config-provider\");\n return _openBlock(), _createBlock(_component_el_config_provider, {\n locale: $options.elementLocale\n }, {\n default: _withCtx(() => [_createVNode(_component_router_view)]),\n _: 1\n }, 8, [\"locale\"]);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nimport zhCnLocale from 'element-plus/es/locale/lang/zh-cn';\nimport enLocale from 'element-plus/es/locale/lang/en';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode']),\n elementLocale() {\n return this.$i18n.locale === 'zh-CN' ? zhCnLocale : enLocale;\n }\n },\n mounted() {\n // 初始化 OverlayScrollbars 悬浮滚动条\n this.$nextTick(() => {\n this.initOverlayScrollbars();\n this.setupImageViewerObserver();\n });\n },\n beforeUnmount() {\n // 清理 MutationObserver\n if (this.imageViewerObserver) {\n this.imageViewerObserver.disconnect();\n }\n },\n watch: {},\n methods: {\n initOverlayScrollbars() {\n try {\n // 检查是否已经初始化\n if (OverlayScrollbars.valid(document.body)) {\n this.osInstance = OverlayScrollbars(document.body);\n return;\n }\n\n // 应用到 body 实现全局悬浮滚动条\n this.osInstance = OverlayScrollbars(document.body, {\n scrollbars: {\n theme: 'os-theme-dark',\n visibility: 'auto',\n autoHide: 'scroll',\n autoHideDelay: 600,\n dragScroll: true,\n clickScroll: true\n },\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n console.log('OverlayScrollbars initialized successfully');\n } catch (error) {\n console.error('Failed to initialize OverlayScrollbars:', error);\n }\n },\n setupImageViewerObserver() {\n // 监听图片预览器的打开/关闭,动态控制 OverlayScrollbars\n this.imageViewerObserver = new MutationObserver(mutations => {\n const imageViewer = document.querySelector('.el-image-viewer__wrapper');\n if (imageViewer) {\n // 图片预览器打开,禁用滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'hidden'\n }\n });\n }\n } else {\n // 图片预览器关闭,恢复滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n }\n }\n });\n this.imageViewerObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./App.vue?vue&type=template&id=6633a13d\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\r\nimport { createHead } from '@vueuse/head'; // 导入 createHead\r\nimport ElementPlus from 'element-plus'\r\nimport 'element-plus/es/components/message/style/css'\r\nimport 'element-plus/es/components/message-box/style/css'\r\n\r\nimport { library } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\nimport fontAwesomeIcons from './utils/fontawesomeIcons';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport i18n, { initializeLocale } from './locales'\r\n\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport 'element-plus/theme-chalk/dark/css-vars.css'\r\nimport './styles/global.css'\r\n\r\n// OverlayScrollbars 悬浮滚动条\r\nimport 'overlayscrollbars/overlayscrollbars.css'\r\n\r\n\r\nlibrary.add(...fontAwesomeIcons);\r\n\r\nconst app = createApp(App);\r\nconst head = createHead(); // 创建 head 对象\r\n\r\napp.component('font-awesome-icon', FontAwesomeIcon);\r\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\r\n app.component(key, component)\r\n}\r\n\r\n// 根据 useDarkMode 的值添加或移除 dark 类\r\nconst initDarkModeClass = () => {\r\n const htmlElement = document.documentElement;\r\n let isDarkMode;\r\n\r\n // 判断用户是否是自定义模式\r\n if (store.state.cusDarkMode && store.state.useDarkMode !== null) {\r\n // 用户手动设置了暗色模式\r\n isDarkMode = store.state.useDarkMode;\r\n } else {\r\n // 跟随系统模式或时间\r\n isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n if (!isDarkMode) {\r\n const now = new Date();\r\n const hour = now.getHours();\r\n isDarkMode = hour >= 22 || hour < 6;\r\n }\r\n // 更新 useDarkMode 的值\r\n store.commit('setUseDarkMode', isDarkMode);\r\n }\r\n\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\nconst applyDarkModeClass = (isDarkMode) => {\r\n const htmlElement = document.documentElement;\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\n// 预设网站标题的函数\r\nconst presetSiteTitle = (userConfig) => {\r\n document.title = userConfig?.siteTitle || 'Sanyue ImgHub';\r\n};\r\n\r\n// 预设和更新网站图标的函数\r\nconst presetSiteIcon = (isDarkMode, userConfig) => {\r\n // 同时更改 icon apple-touch-icon 和 mask-icon\r\n const existingIcons = document.querySelectorAll('link[rel=\"icon\"], link[rel=\"apple-touch-icon\"], link[rel=\"mask-icon\"]');\r\n existingIcons.forEach(icon => icon.remove());\r\n\r\n const iconLink = document.createElement('link');\r\n const appleIconLink = document.createElement('link');\r\n const maskIconLink = document.createElement('link');\r\n iconLink.rel = 'icon';\r\n appleIconLink.rel = 'apple-touch-icon';\r\n maskIconLink.rel = 'mask-icon';\r\n\r\n if (isDarkMode) {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n }\r\n\r\n document.head.appendChild(iconLink);\r\n document.head.appendChild(appleIconLink);\r\n document.head.appendChild(maskIconLink);\r\n};\r\n\r\nstore.dispatch('fetchUserConfig').then(() => {\r\n // 优先恢复用户选择;没有持久化选择时使用网页默认语言\r\n initializeLocale(store.getters.userConfig?.defaultLanguage);\r\n\r\n // 初始化时应用 dark 模式\r\n initDarkModeClass();\r\n\r\n // 预设网站标题和图标\r\n presetSiteTitle(store.getters.userConfig);\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n\r\n // 监听 useDarkMode 和 cusDarkMode 的变化\r\n store.subscribe((mutation, state) => {\r\n if (mutation.type === 'setUseDarkMode' && store.state.cusDarkMode) {\r\n applyDarkModeClass(state.useDarkMode);\r\n // 同时更新网站图标\r\n presetSiteIcon(state.useDarkMode, store.getters.userConfig);\r\n }\r\n\r\n // 监听 cusDarkMode 变化,当设置为 false 时重新初始化\r\n if (mutation.type === 'setCusDarkMode' && !mutation.payload) {\r\n // 切换到跟随系统模式,重新初始化\r\n initDarkModeClass();\r\n // 同时更新网站图标\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n }\r\n });\r\n\r\n app.use(store).use(router).use(ElementPlus).use(i18n).mount('#app');\r\n}).catch(error => {\r\n console.error('Failed to load user configuration:', error);\r\n initializeLocale();\r\n app.use(store).use(router).use(ElementPlus).use(i18n).use(head).mount('#app');\r\n})\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"22\":\"755ee57d\",\"206\":\"3ad66e7c\",\"223\":\"a44c93f4\",\"380\":\"3d87f1cb\",\"385\":\"4d3f7ac7\",\"417\":\"f95b3308\",\"596\":\"aa72d40f\",\"711\":\"936a7109\",\"746\":\"d9b50432\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"799\":\"b7d288ff\",\"903\":\"1e4b549d\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"173\":\"36158ceb\",\"206\":\"e53da0eb\",\"223\":\"6b74609d\",\"322\":\"2b40f004\",\"385\":\"4f25fc20\",\"417\":\"774caa69\",\"473\":\"f3f669e8\",\"596\":\"292a1dcd\",\"711\":\"1a30de22\",\"746\":\"e53da0eb\",\"773\":\"147d098d\",\"787\":\"448a9124\",\"799\":\"37a335d7\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"sanyue_imghub:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"173\":1,\"206\":1,\"223\":1,\"322\":1,\"385\":1,\"417\":1,\"473\":1,\"596\":1,\"711\":1,\"746\":1,\"773\":1,\"787\":1,\"799\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^([14]73|322)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksanyue_imghub\"] = self[\"webpackChunksanyue_imghub\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(81525); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","withCredentials","adminAuthGuard","to","from","next","get","then","res","data","adminRequired","store","commit","valid","authType","wasLoggedIn","state","adminLoggedIn","name","ElMessage","error","i18n","global","t","catch","userAuthGuard","userRequired","userLoggedIn","routes","path","component","beforeEnter","router","createRouter","history","createWebHistory","process","createStore","userConfig","bingWallPapers","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode","getters","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setAdminLoggedIn","loggedIn","setUserLoggedIn","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","key","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","response","console","log","fetchBingWallPapers","wallpapers","map","wallpaper","url","Promise","all","resolve","reject","img","Image","onload","onerror","src","modules","plugins","createPersistedState","paths","LOCALE_KEY","FALLBACK_LOCALE","SUPPORTED_LOCALES","Set","normalizeLocale","locale","has","getStoredLocale","resolveInitialLocale","defaultLocale","createI18n","legacy","fallbackLocale","messages","zhCN","en","applyLocale","document","documentElement","lang","initializeLocale","setLocale","normalizedLocale","faAngleDoubleLeft","faAngleDoubleRight","faArrowDown","faArrowLeft","faArrowUp","faAws","faBan","faBars","faBook","faBullhorn","faCalendar","faChartBar","faChartLine","faCheck","faCheckSquare","faChevronDown","faChevronLeft","faChevronRight","faCircleHalfStroke","faClock","faCloud","faCloudflare","faCloudUpload","faCloudUploadAlt","faCode","faCodeBranch","faCog","faCogs","faComments","faCompressAlt","faCopy","faDatabase","faDiscord","faDownload","faEdit","faEllipsisH","faEllipsisV","faExclamation","faExclamationCircle","faExclamationTriangle","faExternalLinkAlt","faEye","faFile","faFileAlt","faFileExport","faFileSignature","faFilter","faFolder","faFolderOpen","faFolderTree","faGlobe","faHashtag","faHistory","faHome","faICursor","faImage","faImages","faInbox","faInfoCircle","faLink","faList","faMinus","faMinusSquare","faMoon","faMusic","faPager","faPaperPlane","faPaste","faPlus","faQuestionCircle","faQuoteRight","faRedo","faRobot","faSave","faSearch","faServer","faShareAlt","faShield","faShieldAlt","faSignOutAlt","faSortAlphaUp","faSortAmountDown","faSpinner","faSquare","faSun","faSync","faSyncAlt","faTachometerAlt","faTag","faTags","faThLarge","faTimes","faTools","faTrashAlt","faUpload","faUserCog","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","_component_el_config_provider","elementLocale","default","_","osInstance","imageViewerObserver","computed","this","$i18n","mounted","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","MutationObserver","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fontAwesomeIcons","app","createApp","App","head","createHead","FontAwesomeIcon","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","isDarkMode","window","matchMedia","matches","now","Date","hour","getHours","classList","remove","applyDarkModeClass","presetSiteTitle","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","defaultLanguage","subscribe","mutation","type","payload","use","ElementPlus","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","e","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","event","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","bind","target","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","err","Error","code","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","id","chunkLoadingGlobal","self","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app.d9dc13a4.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/utils/axios.js","webpack://sanyue_imghub/./src/router/index.js","webpack://sanyue_imghub/./src/store/index.js","webpack://sanyue_imghub/./src/locales/index.js","webpack://sanyue_imghub/./src/utils/fontawesomeIcons.js","webpack://sanyue_imghub/./src/App.vue?83ca","webpack://sanyue_imghub/./src/App.vue","webpack://sanyue_imghub/./src/App.vue?a135","webpack://sanyue_imghub/./src/main.js","webpack://sanyue_imghub/webpack/bootstrap","webpack://sanyue_imghub/webpack/runtime/chunk loaded","webpack://sanyue_imghub/webpack/runtime/compat get default export","webpack://sanyue_imghub/webpack/runtime/define property getters","webpack://sanyue_imghub/webpack/runtime/ensure chunk","webpack://sanyue_imghub/webpack/runtime/get javascript chunk filename","webpack://sanyue_imghub/webpack/runtime/get mini-css chunk filename","webpack://sanyue_imghub/webpack/runtime/global","webpack://sanyue_imghub/webpack/runtime/hasOwnProperty shorthand","webpack://sanyue_imghub/webpack/runtime/load script","webpack://sanyue_imghub/webpack/runtime/make namespace object","webpack://sanyue_imghub/webpack/runtime/publicPath","webpack://sanyue_imghub/webpack/runtime/css loading","webpack://sanyue_imghub/webpack/runtime/jsonp chunk loading","webpack://sanyue_imghub/webpack/startup"],"sourcesContent":["import axios from 'axios';\r\n\r\n// 创建axios实例\r\nconst instance = axios.create({\r\n baseURL: process.env.NODE_ENV === 'production' ? '/' : '/api',\r\n withCredentials: true, // 始终携带 Cookie(HttpOnly session cookie)\r\n});\r\n\r\nexport default instance;\r\n","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport store from '../store'\r\nimport axios from '@/utils/axios'\r\nimport i18n from '@/locales'\r\n\r\n// 通用的管理员认证守卫\r\nconst adminAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要管理端认证,直接放行\r\n if (!data.adminRequired) {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效的 admin session\r\n if (data.valid && data.authType === 'admin') {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要用户端认证,直接放行\r\n if (!data.userRequired) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效 session(user 或 admin 都可以)\r\n if (data.valid) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'home',\r\n component: () => import('../views/UploadHome.vue'),\r\n beforeEnter: userAuthGuard\r\n },\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: () => import('../views/Login.vue')\r\n },\r\n {\r\n path: '/dashboard',\r\n name: 'dashboard',\r\n component: () => import('../views/AdminDashBoard.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/customerConfig',\r\n name: 'customerConfig',\r\n component: () => import('../views/CustomerConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/systemConfig',\r\n name: 'systemConfig',\r\n component: () => import('../views/SystemConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/adminLogin',\r\n name: 'adminLogin',\r\n component: () => import('../views/AdminLogin.vue'),\r\n },\r\n {\r\n path: '/blockimg',\r\n name: 'blockimg',\r\n component: () => import('../views/BlockImage.vue'),\r\n },\r\n {\r\n path: '/whiteliston',\r\n name: 'whiteliston',\r\n component: () => import('../views/WhiteListOn.vue'),\r\n },\r\n {\r\n path: '/browse/:dir*',\r\n name: 'publicBrowse',\r\n component: () => import('../views/PublicBrowse.vue'),\r\n },\r\n {\r\n path: '/:pathMatch(.*)*',\r\n name: 'notFound',\r\n component: () => import('../views/NotFound.vue'),\r\n },\r\n]\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(process.env.BASE_URL),\r\n routes\r\n})\r\n\r\nexport default router\r\n","import { createStore } from 'vuex'\r\nimport axios from '@/utils/axios';\r\nimport createPersistedState from 'vuex-persistedstate';\r\n\r\nexport default createStore({\r\n state: {\r\n userConfig: null,\r\n bingWallPapers: [],\r\n // 会话状态标记(不存储密码,实际认证通过 HttpOnly Cookie)\r\n adminLoggedIn: false,\r\n userLoggedIn: false,\r\n uploadMethod: 'default',\r\n uploadCopyUrlForm: '',\r\n compressConfig: {\r\n customerCompress: undefined,\r\n compressQuality: undefined,\r\n compressBar: undefined,\r\n serverCompress: undefined,\r\n convertToWebp: undefined,\r\n },\r\n storeUploadChannel: '',\r\n storeChannelName: null, // 指定的渠道名称,null表示从未选择,''表示用户主动清空\r\n storeAutoRetry: true,\r\n storeUploadNameType: '',\r\n uploadFolder: '',\r\n customUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n adminUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n autoReUpload: true,\r\n // 深色模式\r\n useDarkMode: null,\r\n cusDarkMode: false,\r\n },\r\n getters: {\r\n userConfig: state => state.userConfig,\r\n bingWallPapers: state => state.bingWallPapers,\r\n adminLoggedIn: state => state.adminLoggedIn,\r\n userLoggedIn: state => state.userLoggedIn,\r\n storeUploadMethod: state => state.uploadMethod,\r\n uploadCopyUrlForm: state => state.uploadCopyUrlForm,\r\n compressConfig: state => state.compressConfig,\r\n storeUploadChannel: state => state.storeUploadChannel,\r\n storeChannelName: state => state.storeChannelName,\r\n storeUploadNameType: state => state.storeUploadNameType,\r\n customUrlSettings: state => state.customUrlSettings,\r\n storeAutoRetry: state => state.storeAutoRetry,\r\n adminUrlSettings: state => state.adminUrlSettings,\r\n storeUploadFolder: (state) => {\r\n return state.uploadFolder || localStorage.getItem('uploadFolder') || ''\r\n },\r\n useDarkMode: state => state.useDarkMode,\r\n cusDarkMode: state => state.cusDarkMode,\r\n storeAutoReUpload: state => state.autoReUpload,\r\n },\r\n mutations: {\r\n setUserConfig(state, userConfig) {\r\n state.userConfig = userConfig;\r\n },\r\n setBingWallPapers(state, bingWallPapers) {\r\n state.bingWallPapers = bingWallPapers;\r\n },\r\n setAdminLoggedIn(state, loggedIn) {\r\n state.adminLoggedIn = loggedIn;\r\n },\r\n setUserLoggedIn(state, loggedIn) {\r\n state.userLoggedIn = loggedIn;\r\n },\r\n setUploadMethod(state, uploadMethod) {\r\n state.uploadMethod = uploadMethod;\r\n },\r\n setUploadCopyUrlForm(state, uploadCopyUrlForm) {\r\n state.uploadCopyUrlForm = uploadCopyUrlForm;\r\n },\r\n setCompressConfig(state, { key, value }) {\r\n state.compressConfig[key] = value;\r\n },\r\n setStoreUploadChannel(state, uploadChannel) {\r\n state.storeUploadChannel = uploadChannel;\r\n },\r\n setStoreChannelName(state, channelName) {\r\n state.storeChannelName = channelName;\r\n },\r\n setStoreUploadNameType(state, storeUploadNameType) {\r\n state.storeUploadNameType = storeUploadNameType;\r\n },\r\n setCustomUrlSettings(state, { key, value }) {\r\n state.customUrlSettings[key] = value;\r\n },\r\n setStoreAutoRetry(state, storeAutoRetry) {\r\n state.storeAutoRetry = storeAutoRetry;\r\n },\r\n setAdminUrlSettings(state, { key, value }) {\r\n state.adminUrlSettings[key] = value;\r\n },\r\n setUseDarkMode(state, useDarkMode) {\r\n state.useDarkMode = useDarkMode;\r\n },\r\n setCusDarkMode(state, cusDarkMode) {\r\n state.cusDarkMode = cusDarkMode;\r\n },\r\n setStoreUploadFolder(state, folder) {\r\n state.uploadFolder = folder\r\n localStorage.setItem('uploadFolder', folder)\r\n },\r\n setStoreAutoReUpload(state, autoReUpload) {\r\n state.autoReUpload = autoReUpload;\r\n }\r\n },\r\n actions: {\r\n async fetchUserConfig({ commit }) {\r\n try {\r\n const response = await axios.get('/api/userConfig');\r\n commit('setUserConfig', response.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n async fetchBingWallPapers({ commit }) {\r\n try {\r\n const response = await axios.get('/api/bing/wallpaper');\r\n const wallpapers = response.data.data;\r\n const bingWallPapers = wallpapers.map(wallpaper => {\r\n return {\r\n url: 'https://www.bing.com' + wallpaper.url,\r\n };\r\n }\r\n );\r\n\r\n //预加载图片,阻塞直到图片加载完成\r\n await Promise.all(bingWallPapers.map(wallpaper => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = resolve;\r\n img.onerror = reject;\r\n img.src = wallpaper.url;\r\n });\r\n }));\r\n commit('setBingWallPapers', bingWallPapers);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n },\r\n modules: {\r\n },\r\n plugins: [createPersistedState({\r\n // 只持久化非敏感数据,不持久化认证状态\r\n paths: [\r\n 'userConfig',\r\n 'uploadMethod',\r\n 'uploadCopyUrlForm',\r\n 'compressConfig',\r\n 'storeUploadChannel',\r\n 'storeChannelName',\r\n 'storeAutoRetry',\r\n 'storeUploadNameType',\r\n 'uploadFolder',\r\n 'customUrlSettings',\r\n 'adminUrlSettings',\r\n 'autoReUpload',\r\n 'useDarkMode',\r\n 'cusDarkMode',\r\n ]\r\n })]\r\n})\r\n","import { createI18n } from 'vue-i18n'\r\nimport zhCN from './zh-CN.json'\r\nimport en from './en.json'\r\n\r\nconst LOCALE_KEY = 'app-locale'\r\nconst FALLBACK_LOCALE = 'zh-CN'\r\nconst SUPPORTED_LOCALES = new Set(['zh-CN', 'en'])\r\n\r\nfunction normalizeLocale(locale) {\r\n return SUPPORTED_LOCALES.has(locale) ? locale : null\r\n}\r\n\r\nfunction getStoredLocale() {\r\n return normalizeLocale(localStorage.getItem(LOCALE_KEY))\r\n}\r\n\r\nexport function resolveInitialLocale(defaultLocale) {\r\n return getStoredLocale() || normalizeLocale(defaultLocale) || FALLBACK_LOCALE\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale() || FALLBACK_LOCALE,\r\n fallbackLocale: FALLBACK_LOCALE,\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nfunction applyLocale(locale) {\r\n i18n.global.locale = locale\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\r\n}\r\n\r\nexport function initializeLocale(defaultLocale) {\r\n const locale = resolveInitialLocale(defaultLocale)\r\n applyLocale(locale)\r\n return locale\r\n}\r\n\r\nexport function setLocale(locale) {\r\n const normalizedLocale = normalizeLocale(locale) || FALLBACK_LOCALE\r\n applyLocale(normalizedLocale)\r\n localStorage.setItem(LOCALE_KEY, normalizedLocale)\r\n}\r\n\r\nexport { LOCALE_KEY, getStoredLocale }\r\nexport default i18n\r\n","import { faAws } from '@fortawesome/free-brands-svg-icons/faAws';\r\nimport { faCloudflare } from '@fortawesome/free-brands-svg-icons/faCloudflare';\r\nimport { faDiscord } from '@fortawesome/free-brands-svg-icons/faDiscord';\r\nimport { faAngleDoubleLeft } from '@fortawesome/free-solid-svg-icons/faAngleDoubleLeft';\r\nimport { faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons/faAngleDoubleRight';\r\nimport { faArrowDown } from '@fortawesome/free-solid-svg-icons/faArrowDown';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons/faArrowLeft';\r\nimport { faArrowUp } from '@fortawesome/free-solid-svg-icons/faArrowUp';\r\nimport { faBan } from '@fortawesome/free-solid-svg-icons/faBan';\r\nimport { faBars } from '@fortawesome/free-solid-svg-icons/faBars';\r\nimport { faBook } from '@fortawesome/free-solid-svg-icons/faBook';\r\nimport { faBullhorn } from '@fortawesome/free-solid-svg-icons/faBullhorn';\r\nimport { faCalendar } from '@fortawesome/free-solid-svg-icons/faCalendar';\r\nimport { faChartBar } from '@fortawesome/free-solid-svg-icons/faChartBar';\r\nimport { faChartLine } from '@fortawesome/free-solid-svg-icons/faChartLine';\r\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';\r\nimport { faCheckSquare } from '@fortawesome/free-solid-svg-icons/faCheckSquare';\r\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';\r\nimport { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';\r\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';\r\nimport { faCircleHalfStroke } from '@fortawesome/free-solid-svg-icons/faCircleHalfStroke';\r\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock';\r\nimport { faCloud } from '@fortawesome/free-solid-svg-icons/faCloud';\r\nimport { faCloudUpload } from '@fortawesome/free-solid-svg-icons/faCloudUpload';\r\nimport { faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons/faCloudUploadAlt';\r\nimport { faCode } from '@fortawesome/free-solid-svg-icons/faCode';\r\nimport { faCodeBranch } from '@fortawesome/free-solid-svg-icons/faCodeBranch';\r\nimport { faCog } from '@fortawesome/free-solid-svg-icons/faCog';\r\nimport { faCogs } from '@fortawesome/free-solid-svg-icons/faCogs';\r\nimport { faComments } from '@fortawesome/free-solid-svg-icons/faComments';\r\nimport { faCompressAlt } from '@fortawesome/free-solid-svg-icons/faCompressAlt';\r\nimport { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy';\r\nimport { faDatabase } from '@fortawesome/free-solid-svg-icons/faDatabase';\r\nimport { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload';\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons/faEdit';\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons/faEllipsisH';\r\nimport { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';\r\nimport { faExclamation } from '@fortawesome/free-solid-svg-icons/faExclamation';\r\nimport { faExclamationCircle } from '@fortawesome/free-solid-svg-icons/faExclamationCircle';\r\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons/faExclamationTriangle';\r\nimport { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons/faExternalLinkAlt';\r\nimport { faEye } from '@fortawesome/free-solid-svg-icons/faEye';\r\nimport { faFile } from '@fortawesome/free-solid-svg-icons/faFile';\r\nimport { faFileAlt } from '@fortawesome/free-solid-svg-icons/faFileAlt';\r\nimport { faFileExport } from '@fortawesome/free-solid-svg-icons/faFileExport';\r\nimport { faFileSignature } from '@fortawesome/free-solid-svg-icons/faFileSignature';\r\nimport { faFilter } from '@fortawesome/free-solid-svg-icons/faFilter';\r\nimport { faFolder } from '@fortawesome/free-solid-svg-icons/faFolder';\r\nimport { faFolderOpen } from '@fortawesome/free-solid-svg-icons/faFolderOpen';\r\nimport { faFolderTree } from '@fortawesome/free-solid-svg-icons/faFolderTree';\r\nimport { faGlobe } from '@fortawesome/free-solid-svg-icons/faGlobe';\r\nimport { faHashtag } from '@fortawesome/free-solid-svg-icons/faHashtag';\r\nimport { faHistory } from '@fortawesome/free-solid-svg-icons/faHistory';\r\nimport { faHome } from '@fortawesome/free-solid-svg-icons/faHome';\r\nimport { faICursor } from '@fortawesome/free-solid-svg-icons/faICursor';\r\nimport { faImage } from '@fortawesome/free-solid-svg-icons/faImage';\r\nimport { faImages } from '@fortawesome/free-solid-svg-icons/faImages';\r\nimport { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';\r\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle';\r\nimport { faLink } from '@fortawesome/free-solid-svg-icons/faLink';\r\nimport { faList } from '@fortawesome/free-solid-svg-icons/faList';\r\nimport { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';\r\nimport { faMinusSquare } from '@fortawesome/free-solid-svg-icons/faMinusSquare';\r\nimport { faMoon } from '@fortawesome/free-solid-svg-icons/faMoon';\r\nimport { faMusic } from '@fortawesome/free-solid-svg-icons/faMusic';\r\nimport { faPager } from '@fortawesome/free-solid-svg-icons/faPager';\r\nimport { faPaperPlane } from '@fortawesome/free-solid-svg-icons/faPaperPlane';\r\nimport { faPaste } from '@fortawesome/free-solid-svg-icons/faPaste';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons/faQuestionCircle';\r\nimport { faQuoteRight } from '@fortawesome/free-solid-svg-icons/faQuoteRight';\r\nimport { faRedo } from '@fortawesome/free-solid-svg-icons/faRedo';\r\nimport { faRobot } from '@fortawesome/free-solid-svg-icons/faRobot';\r\nimport { faSave } from '@fortawesome/free-solid-svg-icons/faSave';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons/faSearch';\r\nimport { faServer } from '@fortawesome/free-solid-svg-icons/faServer';\r\nimport { faShareAlt } from '@fortawesome/free-solid-svg-icons/faShareAlt';\r\nimport { faShield } from '@fortawesome/free-solid-svg-icons/faShield';\r\nimport { faShieldAlt } from '@fortawesome/free-solid-svg-icons/faShieldAlt';\r\nimport { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt';\r\nimport { faSortAlphaUp } from '@fortawesome/free-solid-svg-icons/faSortAlphaUp';\r\nimport { faSortAmountDown } from '@fortawesome/free-solid-svg-icons/faSortAmountDown';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons/faSpinner';\r\nimport { faSquare } from '@fortawesome/free-solid-svg-icons/faSquare';\r\nimport { faSun } from '@fortawesome/free-solid-svg-icons/faSun';\r\nimport { faSync } from '@fortawesome/free-solid-svg-icons/faSync';\r\nimport { faSyncAlt } from '@fortawesome/free-solid-svg-icons/faSyncAlt';\r\nimport { faTachometerAlt } from '@fortawesome/free-solid-svg-icons/faTachometerAlt';\r\nimport { faTag } from '@fortawesome/free-solid-svg-icons/faTag';\r\nimport { faTags } from '@fortawesome/free-solid-svg-icons/faTags';\r\nimport { faThLarge } from '@fortawesome/free-solid-svg-icons/faThLarge';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';\r\nimport { faTools } from '@fortawesome/free-solid-svg-icons/faTools';\r\nimport { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt';\r\nimport { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload';\r\nimport { faUserCog } from '@fortawesome/free-solid-svg-icons/faUserCog';\r\n\r\nexport default [\r\n faAngleDoubleLeft,\r\n faAngleDoubleRight,\r\n faArrowDown,\r\n faArrowLeft,\r\n faArrowUp,\r\n faAws,\r\n faBan,\r\n faBars,\r\n faBook,\r\n faBullhorn,\r\n faCalendar,\r\n faChartBar,\r\n faChartLine,\r\n faCheck,\r\n faCheckSquare,\r\n faChevronDown,\r\n faChevronLeft,\r\n faChevronRight,\r\n faCircleHalfStroke,\r\n faClock,\r\n faCloud,\r\n faCloudflare,\r\n faCloudUpload,\r\n faCloudUploadAlt,\r\n faCode,\r\n faCodeBranch,\r\n faCog,\r\n faCogs,\r\n faComments,\r\n faCompressAlt,\r\n faCopy,\r\n faDatabase,\r\n faDiscord,\r\n faDownload,\r\n faEdit,\r\n faEllipsisH,\r\n faEllipsisV,\r\n faExclamation,\r\n faExclamationCircle,\r\n faExclamationTriangle,\r\n faExternalLinkAlt,\r\n faEye,\r\n faFile,\r\n faFileAlt,\r\n faFileExport,\r\n faFileSignature,\r\n faFilter,\r\n faFolder,\r\n faFolderOpen,\r\n faFolderTree,\r\n faGlobe,\r\n faHashtag,\r\n faHistory,\r\n faHome,\r\n faICursor,\r\n faImage,\r\n faImages,\r\n faInbox,\r\n faInfoCircle,\r\n faLink,\r\n faList,\r\n faMinus,\r\n faMinusSquare,\r\n faMoon,\r\n faMusic,\r\n faPager,\r\n faPaperPlane,\r\n faPaste,\r\n faPlus,\r\n faQuestionCircle,\r\n faQuoteRight,\r\n faRedo,\r\n faRobot,\r\n faSave,\r\n faSearch,\r\n faServer,\r\n faShareAlt,\r\n faShield,\r\n faShieldAlt,\r\n faSignOutAlt,\r\n faSortAlphaUp,\r\n faSortAmountDown,\r\n faSpinner,\r\n faSquare,\r\n faSun,\r\n faSync,\r\n faSyncAlt,\r\n faTachometerAlt,\r\n faTag,\r\n faTags,\r\n faThLarge,\r\n faTimes,\r\n faTools,\r\n faTrashAlt,\r\n faUpload,\r\n faUserCog\r\n];\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_router_view = _resolveComponent(\"router-view\");\n const _component_el_config_provider = _resolveComponent(\"el-config-provider\");\n return _openBlock(), _createBlock(_component_el_config_provider, {\n locale: $options.elementLocale\n }, {\n default: _withCtx(() => [_createVNode(_component_router_view)]),\n _: 1\n }, 8, [\"locale\"]);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nimport zhCnLocale from 'element-plus/es/locale/lang/zh-cn';\nimport enLocale from 'element-plus/es/locale/lang/en';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode']),\n elementLocale() {\n return this.$i18n.locale === 'zh-CN' ? zhCnLocale : enLocale;\n }\n },\n mounted() {\n // 初始化 OverlayScrollbars 悬浮滚动条\n this.$nextTick(() => {\n this.initOverlayScrollbars();\n this.setupImageViewerObserver();\n });\n },\n beforeUnmount() {\n // 清理 MutationObserver\n if (this.imageViewerObserver) {\n this.imageViewerObserver.disconnect();\n }\n },\n watch: {},\n methods: {\n initOverlayScrollbars() {\n try {\n // 检查是否已经初始化\n if (OverlayScrollbars.valid(document.body)) {\n this.osInstance = OverlayScrollbars(document.body);\n return;\n }\n\n // 应用到 body 实现全局悬浮滚动条\n this.osInstance = OverlayScrollbars(document.body, {\n scrollbars: {\n theme: 'os-theme-dark',\n visibility: 'auto',\n autoHide: 'scroll',\n autoHideDelay: 600,\n dragScroll: true,\n clickScroll: true\n },\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n console.log('OverlayScrollbars initialized successfully');\n } catch (error) {\n console.error('Failed to initialize OverlayScrollbars:', error);\n }\n },\n setupImageViewerObserver() {\n // 监听图片预览器的打开/关闭,动态控制 OverlayScrollbars\n this.imageViewerObserver = new MutationObserver(mutations => {\n const imageViewer = document.querySelector('.el-image-viewer__wrapper');\n if (imageViewer) {\n // 图片预览器打开,禁用滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'hidden'\n }\n });\n }\n } else {\n // 图片预览器关闭,恢复滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n }\n }\n });\n this.imageViewerObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./App.vue?vue&type=template&id=6633a13d\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\r\nimport { createHead } from '@vueuse/head'; // 导入 createHead\r\nimport ElementPlus from 'element-plus'\r\nimport 'element-plus/es/components/message/style/css'\r\nimport 'element-plus/es/components/message-box/style/css'\r\n\r\nimport { library } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\nimport fontAwesomeIcons from './utils/fontawesomeIcons';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport i18n, { initializeLocale } from './locales'\r\n\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport 'element-plus/theme-chalk/dark/css-vars.css'\r\nimport './styles/global.css'\r\n\r\n// OverlayScrollbars 悬浮滚动条\r\nimport 'overlayscrollbars/overlayscrollbars.css'\r\n\r\n\r\nlibrary.add(...fontAwesomeIcons);\r\n\r\nconst app = createApp(App);\r\nconst head = createHead(); // 创建 head 对象\r\n\r\napp.component('font-awesome-icon', FontAwesomeIcon);\r\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\r\n app.component(key, component)\r\n}\r\n\r\n// 根据 useDarkMode 的值添加或移除 dark 类\r\nconst initDarkModeClass = () => {\r\n const htmlElement = document.documentElement;\r\n let isDarkMode;\r\n\r\n // 判断用户是否是自定义模式\r\n if (store.state.cusDarkMode && store.state.useDarkMode !== null) {\r\n // 用户手动设置了暗色模式\r\n isDarkMode = store.state.useDarkMode;\r\n } else {\r\n // 跟随系统模式或时间\r\n isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n if (!isDarkMode) {\r\n const now = new Date();\r\n const hour = now.getHours();\r\n isDarkMode = hour >= 22 || hour < 6;\r\n }\r\n // 更新 useDarkMode 的值\r\n store.commit('setUseDarkMode', isDarkMode);\r\n }\r\n\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\nconst applyDarkModeClass = (isDarkMode) => {\r\n const htmlElement = document.documentElement;\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\n// 预设网站标题的函数\r\nconst presetSiteTitle = (userConfig) => {\r\n document.title = userConfig?.siteTitle || 'Sanyue ImgHub';\r\n};\r\n\r\n// 预设和更新网站图标的函数\r\nconst presetSiteIcon = (isDarkMode, userConfig) => {\r\n // 同时更改 icon apple-touch-icon 和 mask-icon\r\n const existingIcons = document.querySelectorAll('link[rel=\"icon\"], link[rel=\"apple-touch-icon\"], link[rel=\"mask-icon\"]');\r\n existingIcons.forEach(icon => icon.remove());\r\n\r\n const iconLink = document.createElement('link');\r\n const appleIconLink = document.createElement('link');\r\n const maskIconLink = document.createElement('link');\r\n iconLink.rel = 'icon';\r\n appleIconLink.rel = 'apple-touch-icon';\r\n maskIconLink.rel = 'mask-icon';\r\n\r\n if (isDarkMode) {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n }\r\n\r\n document.head.appendChild(iconLink);\r\n document.head.appendChild(appleIconLink);\r\n document.head.appendChild(maskIconLink);\r\n};\r\n\r\nstore.dispatch('fetchUserConfig').then(() => {\r\n // 优先恢复用户选择;没有持久化选择时使用网页默认语言\r\n initializeLocale(store.getters.userConfig?.defaultLanguage);\r\n\r\n // 初始化时应用 dark 模式\r\n initDarkModeClass();\r\n\r\n // 预设网站标题和图标\r\n presetSiteTitle(store.getters.userConfig);\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n\r\n // 监听 useDarkMode 和 cusDarkMode 的变化\r\n store.subscribe((mutation, state) => {\r\n if (mutation.type === 'setUseDarkMode' && store.state.cusDarkMode) {\r\n applyDarkModeClass(state.useDarkMode);\r\n // 同时更新网站图标\r\n presetSiteIcon(state.useDarkMode, store.getters.userConfig);\r\n }\r\n\r\n // 监听 cusDarkMode 变化,当设置为 false 时重新初始化\r\n if (mutation.type === 'setCusDarkMode' && !mutation.payload) {\r\n // 切换到跟随系统模式,重新初始化\r\n initDarkModeClass();\r\n // 同时更新网站图标\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n }\r\n });\r\n\r\n app.use(store).use(router).use(ElementPlus).use(i18n).mount('#app');\r\n}).catch(error => {\r\n console.error('Failed to load user configuration:', error);\r\n initializeLocale();\r\n app.use(store).use(router).use(ElementPlus).use(i18n).use(head).mount('#app');\r\n})\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"206\":\"3ad66e7c\",\"223\":\"73628f82\",\"380\":\"3d87f1cb\",\"385\":\"4d3f7ac7\",\"437\":\"fa57fedd\",\"540\":\"8854b4d5\",\"609\":\"3a7a8c93\",\"711\":\"936a7109\",\"746\":\"d9b50432\",\"757\":\"27c783c1\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"903\":\"1e4b549d\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"173\":\"36158ceb\",\"206\":\"e53da0eb\",\"223\":\"6b74609d\",\"385\":\"4f25fc20\",\"437\":\"391209f6\",\"473\":\"f3f669e8\",\"581\":\"e91379d5\",\"609\":\"e5e9e058\",\"711\":\"1a30de22\",\"746\":\"e53da0eb\",\"757\":\"86e23e04\",\"773\":\"147d098d\",\"787\":\"448a9124\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"sanyue_imghub:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"173\":1,\"206\":1,\"223\":1,\"385\":1,\"437\":1,\"473\":1,\"581\":1,\"609\":1,\"711\":1,\"746\":1,\"757\":1,\"773\":1,\"787\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^([14]73|581)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksanyue_imghub\"] = self[\"webpackChunksanyue_imghub\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(81525); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","withCredentials","adminAuthGuard","to","from","next","get","then","res","data","adminRequired","store","commit","valid","authType","wasLoggedIn","state","adminLoggedIn","name","ElMessage","error","i18n","global","t","catch","userAuthGuard","userRequired","userLoggedIn","routes","path","component","beforeEnter","router","createRouter","history","createWebHistory","process","createStore","userConfig","bingWallPapers","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode","getters","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setAdminLoggedIn","loggedIn","setUserLoggedIn","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","key","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","response","console","log","fetchBingWallPapers","wallpapers","map","wallpaper","url","Promise","all","resolve","reject","img","Image","onload","onerror","src","modules","plugins","createPersistedState","paths","LOCALE_KEY","FALLBACK_LOCALE","SUPPORTED_LOCALES","Set","normalizeLocale","locale","has","getStoredLocale","resolveInitialLocale","defaultLocale","createI18n","legacy","fallbackLocale","messages","zhCN","en","applyLocale","document","documentElement","lang","initializeLocale","setLocale","normalizedLocale","faAngleDoubleLeft","faAngleDoubleRight","faArrowDown","faArrowLeft","faArrowUp","faAws","faBan","faBars","faBook","faBullhorn","faCalendar","faChartBar","faChartLine","faCheck","faCheckSquare","faChevronDown","faChevronLeft","faChevronRight","faCircleHalfStroke","faClock","faCloud","faCloudflare","faCloudUpload","faCloudUploadAlt","faCode","faCodeBranch","faCog","faCogs","faComments","faCompressAlt","faCopy","faDatabase","faDiscord","faDownload","faEdit","faEllipsisH","faEllipsisV","faExclamation","faExclamationCircle","faExclamationTriangle","faExternalLinkAlt","faEye","faFile","faFileAlt","faFileExport","faFileSignature","faFilter","faFolder","faFolderOpen","faFolderTree","faGlobe","faHashtag","faHistory","faHome","faICursor","faImage","faImages","faInbox","faInfoCircle","faLink","faList","faMinus","faMinusSquare","faMoon","faMusic","faPager","faPaperPlane","faPaste","faPlus","faQuestionCircle","faQuoteRight","faRedo","faRobot","faSave","faSearch","faServer","faShareAlt","faShield","faShieldAlt","faSignOutAlt","faSortAlphaUp","faSortAmountDown","faSpinner","faSquare","faSun","faSync","faSyncAlt","faTachometerAlt","faTag","faTags","faThLarge","faTimes","faTools","faTrashAlt","faUpload","faUserCog","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","_component_el_config_provider","elementLocale","default","_","osInstance","imageViewerObserver","computed","this","$i18n","mounted","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","MutationObserver","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fontAwesomeIcons","app","createApp","App","head","createHead","FontAwesomeIcon","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","isDarkMode","window","matchMedia","matches","now","Date","hour","getHours","classList","remove","applyDarkModeClass","presetSiteTitle","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","defaultLanguage","subscribe","mutation","type","payload","use","ElementPlus","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","e","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","event","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","bind","target","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","err","Error","code","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","id","chunkLoadingGlobal","self","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/app.d9dc13a4.js.map.gz b/frontend-dist/js/app.d9dc13a4.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..e8e0fed894376c28305b1f2ad53434bfb62d399c GIT binary patch literal 18801 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