From c82b3d724ef936da1206dba1c93daa23c6e5581f Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Tue, 28 Jul 2026 16:46:04 +0800 Subject: [PATCH] fix: refine mobile upload layout --- .../{318.5939769e.css => 927.b1a356fd.css} | 2 +- ...18.5939769e.css.gz => 927.b1a356fd.css.gz} | Bin 11970 -> 12056 bytes frontend-dist/index.html | 2 +- frontend-dist/index.html.gz | Bin 546 -> 545 bytes frontend-dist/js/318.0e6c0e43.js | 2 -- frontend-dist/js/318.0e6c0e43.js.gz | Bin 32906 -> 0 bytes frontend-dist/js/318.0e6c0e43.js.map | 1 - frontend-dist/js/318.0e6c0e43.js.map.gz | Bin 82487 -> 0 bytes frontend-dist/js/927.1adefc82.js | 2 ++ frontend-dist/js/927.1adefc82.js.gz | Bin 0 -> 32692 bytes frontend-dist/js/927.1adefc82.js.map | 1 + frontend-dist/js/927.1adefc82.js.map.gz | Bin 0 -> 82764 bytes frontend-dist/js/app.79c9e5f6.js | 2 ++ frontend-dist/js/app.79c9e5f6.js.gz | Bin 0 -> 25528 bytes ...pp.86c477e6.js.map => app.79c9e5f6.js.map} | 2 +- frontend-dist/js/app.79c9e5f6.js.map.gz | Bin 0 -> 18375 bytes frontend-dist/js/app.86c477e6.js | 2 -- frontend-dist/js/app.86c477e6.js.gz | Bin 25529 -> 0 bytes frontend-dist/js/app.86c477e6.js.map.gz | Bin 18376 -> 0 bytes 19 files changed, 8 insertions(+), 8 deletions(-) rename frontend-dist/css/{318.5939769e.css => 927.b1a356fd.css} (53%) rename frontend-dist/css/{318.5939769e.css.gz => 927.b1a356fd.css.gz} (57%) delete mode 100644 frontend-dist/js/318.0e6c0e43.js delete mode 100644 frontend-dist/js/318.0e6c0e43.js.gz delete mode 100644 frontend-dist/js/318.0e6c0e43.js.map delete mode 100644 frontend-dist/js/318.0e6c0e43.js.map.gz create mode 100644 frontend-dist/js/927.1adefc82.js create mode 100644 frontend-dist/js/927.1adefc82.js.gz create mode 100644 frontend-dist/js/927.1adefc82.js.map create mode 100644 frontend-dist/js/927.1adefc82.js.map.gz create mode 100644 frontend-dist/js/app.79c9e5f6.js create mode 100644 frontend-dist/js/app.79c9e5f6.js.gz rename frontend-dist/js/{app.86c477e6.js.map => app.79c9e5f6.js.map} (98%) create mode 100644 frontend-dist/js/app.79c9e5f6.js.map.gz delete mode 100644 frontend-dist/js/app.86c477e6.js delete mode 100644 frontend-dist/js/app.86c477e6.js.gz delete mode 100644 frontend-dist/js/app.86c477e6.js.map.gz diff --git a/frontend-dist/css/318.5939769e.css b/frontend-dist/css/927.b1a356fd.css similarity index 53% rename from frontend-dist/css/318.5939769e.css rename to frontend-dist/css/927.b1a356fd.css index fe134688..eb2fd69e 100644 --- a/frontend-dist/css/318.5939769e.css +++ b/frontend-dist/css/927.b1a356fd.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}.upload-settings-dialog .radio-card-group.compact{gap:8px}.upload-settings-dialog .radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.upload-settings-dialog .radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.upload-settings-dialog .slider-item{flex-direction:column;align-items:flex-start;gap:12px}.upload-settings-dialog .slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.upload-settings-dialog .slider-wrapper .el-slider{flex:1;min-width:0}.upload-settings-dialog .slider-input{width:96px!important;flex-shrink:0}.upload-settings-dialog .slider-input .el-input__inner{text-align:center}.upload-settings-dialog .slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.upload-settings-dialog .slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.upload-settings-dialog .setting-item .radio-card-group.compact{width:100%}.upload-settings-dialog .radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.upload-settings-dialog .radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{justify-content:center}.upload-settings-dialog .slider-wrapper{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-81dfc90a{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-81dfc90a]{--upload-card-height:45vh;--upload-card-busy-height:17vh;--upload-list-height:7vh;--upload-list-inner-height:calc(var(--upload-list-height) - 2px);--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-81dfc90a]{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-81dfc90a] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-81dfc90a]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-81dfc90a]{width:70vw}}.upload-list-card.upload-list-busy[data-v-81dfc90a]{height:var(--upload-list-busy-height)}.upload-card-wrapper[data-v-81dfc90a]{position:relative;overflow:visible}.folder-upload-input[data-v-81dfc90a]{display:none}.folder-upload-icon-button[data-v-81dfc90a]{position:absolute;right:18px;bottom:18px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;box-sizing:border-box;padding:0;border:1px solid var(--glass-border);border-radius:9px;background:var(--glass-bg);color:var(--el-text-color-secondary);font-size:11px;line-height:1;cursor:pointer;transition:color .2s ease,background-color .2s ease,border-color .2s ease}.folder-upload-icon-button[data-v-81dfc90a]:hover{color:var(--primary-color-accent);border-color:color-mix(in srgb,var(--primary-color) 48%,var(--glass-border));background:color-mix(in srgb,var(--primary-color) 14%,var(--glass-bg))}.folder-upload-icon-button[data-v-81dfc90a]:focus-visible{outline:none;color:var(--primary-color-accent);border-color:color-mix(in srgb,var(--primary-color) 60%,var(--glass-border));background:color-mix(in srgb,var(--primary-color) 14%,var(--glass-bg))}.folder-upload-icon-button.upload-list-busy[data-v-81dfc90a]{right:12px;bottom:12px;width:26px;height:26px;border-radius:8px;font-size:10px}@media (max-width:768px){.folder-upload-icon-button[data-v-81dfc90a]{right:10px;bottom:10px;width:26px;height:26px;border-radius:8px;font-size:10px}}.upload-card-glow[data-v-81dfc90a]{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-81dfc90a]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-81dfc90a]{width:70vw}}.upload-card-busy[data-v-81dfc90a] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-81dfc90a] .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-81dfc90a] .el-upload:focus .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-81dfc90a] .el-upload-dragger.is-dragover,[data-v-81dfc90a] .el-upload-dragger:hover{opacity:.7;box-shadow:var(--glass-shadow)}.is-uploading[data-v-81dfc90a] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-81dfc90a]{position:relative;background:none}.upload-card.is-uploading[data-v-81dfc90a]: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-81dfc90a 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-81dfc90a]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-81dfc90a]{font-size:small}}.el-upload__text.upload-list-busy[data-v-81dfc90a]{font-size:small}.el-icon--upload[data-v-81dfc90a]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-81dfc90a]{color:#6b6b73}.el-upload__text[data-v-81dfc90a] em{color:#1d4ed8}html.dark .el-upload__text[data-v-81dfc90a] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-81dfc90a]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-81dfc90a]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-81dfc90a]{font-size:30px}}.paste-card[data-v-81dfc90a]{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-81dfc90a]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-81dfc90a]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-81dfc90a]: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-81dfc90a 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-81dfc90a] .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-81dfc90a]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-81dfc90a]{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-81dfc90a]{height:50%}.upload-card-textarea[data-v-81dfc90a]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-81dfc90a]: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-81dfc90a] .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-81dfc90a] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-81dfc90a] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-81dfc90a] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-81dfc90a] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-81dfc90a] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-81dfc90a] ::-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-81dfc90a] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-81dfc90a]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-81dfc90a]{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-81dfc90a]: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-81dfc90a]: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-81dfc90a]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-81dfc90a]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-81dfc90a]{margin-top:10px}.paste-card-method-group[data-v-81dfc90a]{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-81dfc90a]: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-81dfc90a]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-81dfc90a]{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-81dfc90a],.paste-card-method-button[data-v-81dfc90a]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-81dfc90a]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-81dfc90a]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-81dfc90a]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-81dfc90a]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-81dfc90a] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-81dfc90a]{width:100%!important;margin-top:8px;gap:8px}.paste-card-upload-button[data-v-81dfc90a]{height:32px;min-width:64px;border-radius:8px!important;font-size:12px;letter-spacing:.02em;padding:0 12px}.paste-card-method-group[data-v-81dfc90a]{width:128px;height:32px;padding:3px;border-radius:9px}.paste-card-method-group[data-v-81dfc90a]:before{border-radius:6px}.paste-card-method-button[data-v-81dfc90a]{height:26px;padding:0 10px;font-size:11px;border-radius:6px}}.upload-list-dashboard[data-v-81dfc90a]{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}[data-v-81dfc90a] .el-upload-dragger{position:relative;overflow:hidden}[data-v-81dfc90a] .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-81dfc90a] .el-upload-dragger:after,[data-v-81dfc90a] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-81dfc90a] .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-81dfc90a]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-81dfc90a 60s linear infinite}.upload-card[data-v-81dfc90a]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-81dfc90a 40s linear infinite,starPulse-81dfc90a 4s ease-in-out infinite}@keyframes starScroll-81dfc90a{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-81dfc90a{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-81dfc90a]{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-81dfc90a]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-81dfc90a]{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-81dfc90a]:focus,.modern-action-btn[data-v-81dfc90a]:focus-visible{outline:none!important}.modern-action-btn[data-v-81dfc90a]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-81dfc90a]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-81dfc90a]:hover:before{opacity:.08}.modern-action-btn[data-v-81dfc90a]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-81dfc90a]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-81dfc90a]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-81dfc90a]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-81dfc90a]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-81dfc90a]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-81dfc90a]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-81dfc90a]{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-81dfc90a]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-81dfc90a]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-81dfc90a]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-81dfc90a]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-81dfc90a]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-81dfc90a]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-81dfc90a]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-81dfc90a]{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-2122c62a]{border:1px solid var(--glass-border);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-2122c62a]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-2122c62a]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-2122c62a]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-2122c62a]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-2122c62a]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-2122c62a]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-2122c62a]{transform:rotate(40deg)}.theme_toggle_g[data-v-2122c62a]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-2122c62a],.icon-fade-leave-active[data-v-2122c62a]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-2122c62a],.icon-fade-leave-from[data-v-2122c62a]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-2122c62a]{display:inline-block}.container[data-v-06705292]{background:var(--bg-color);min-height:100vh}.rotate[data-v-06705292]{animation:spin-06705292 2s ease-in-out}.scale[data-v-06705292]{animation:scale-06705292 .5s ease-in-out}@keyframes spin-06705292{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-06705292{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-06705292{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-06705292{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-06705292{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-06705292]{display:inline-block}.mobile-only[data-v-06705292]{display:none}@media (max-width:768px){.desktop-only[data-v-06705292]{display:none!important}.mobile-only[data-v-06705292]{display:flex!important}}.toggle-dark-button[data-v-06705292]{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-06705292]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-06705292]{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-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-06705292]{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-06705292]{width:2rem;height:2rem}}.upload-method-icon[data-v-06705292]{outline:none}.more-button .svg-inline--fa[data-v-06705292],.upload-method-button .svg-inline--fa[data-v-06705292]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.2em}.mobile-more-dropdown[data-v-06705292]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-06705292]{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-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-06705292]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-06705292]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-06705292],.upload-folder-container[data-v-06705292]{right:58px}}.upload-folder[data-v-06705292]{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-06705292]{width:200px}@media (max-width:768px){.upload-folder[data-v-06705292]{width:80px;height:2rem}.upload-folder.active[data-v-06705292]{width:120px}}.directory-tree-trigger[data-v-06705292]{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-06705292]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-06705292]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.1em}}.upload-folder[data-v-06705292] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-06705292] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-06705292] .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-06705292] .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-06705292] .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-06705292] .el-input__wrapper.is-focus,.upload-folder[data-v-06705292] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-06705292]{--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-06705292],.mobile-more-button[data-v-06705292],.more-dropdown .more-button[data-v-06705292],.quick-toolbar[data-v-06705292],.toggle-dark-button[data-v-06705292],.upload-method-button[data-v-06705292]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-06705292]{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-06705292]{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-06705292]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-06705292]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-06705292]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-06705292]{margin-top:4px}.quick-toolbar-icon[data-v-06705292]{font-size:16px}.quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(0deg)}.info-container[data-v-06705292]:hover,.quick-toolbar-button[data-v-06705292]: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-06705292]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-06705292]:hover{transform:none}.toggle-dark-button[data-v-06705292]:hover,.upload-method-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292]: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-06705292]: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-06705292]{--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-06705292]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-06705292]{gap:2px}.quick-toolbar-more[data-v-06705292]{margin-top:3px}.quick-toolbar-icon[data-v-06705292]{font-size:14px}}[data-v-06705292] .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-06705292]{display:flex;justify-content:center;margin-top:20px}.header[data-v-06705292]{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-06705292]{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-06705292 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-06705292]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-06705292]: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-06705292]:hover:after{width:80%}.main-title[data-v-06705292]{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-06705292]{opacity:0}.title[data-v-06705292]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-06705292]{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-06705292]{animation:crayonWrite-06705292 .82s steps(18) forwards,crayonScratch-06705292 .16s steps(2) .82s 3}@keyframes float-06705292{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-06705292{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-06705292{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-06705292]{font-size:1.55rem;letter-spacing:1px}.title[data-v-06705292]:hover{transform:scale(1.05)}}.upload-home[data-v-06705292]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-06705292]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-06705292]{padding:8px 15px 4px;top:-2.5vh}.title[data-v-06705292]{padding-bottom:5px}.upload[data-v-06705292]{top:-3.8vh}}.footer[data-v-06705292]{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}.upload-settings-dialog .radio-card-group.compact{gap:8px}.upload-settings-dialog .radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.upload-settings-dialog .radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.upload-settings-dialog .slider-item{flex-direction:column;align-items:flex-start;gap:12px}.upload-settings-dialog .slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.upload-settings-dialog .slider-wrapper .el-slider{flex:1;min-width:0}.upload-settings-dialog .slider-input{width:96px!important;flex-shrink:0}.upload-settings-dialog .slider-input .el-input__inner{text-align:center}.upload-settings-dialog .slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.upload-settings-dialog .slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.upload-settings-dialog .setting-item .radio-card-group.compact{width:100%}.upload-settings-dialog .radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.upload-settings-dialog .radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{justify-content:center}.upload-settings-dialog .slider-wrapper{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-5e12bf57{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-5e12bf57]{--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-5e12bf57]{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-5e12bf57] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-5e12bf57]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-5e12bf57]{width:70vw}}.upload-list-card.upload-list-busy[data-v-5e12bf57]{height:var(--upload-list-busy-height)}.upload-list-card[data-v-5e12bf57]:not(.upload-list-busy) .el-scrollbar__wrap{overflow:hidden}.upload-list-card[data-v-5e12bf57]:not(.upload-list-busy) .el-scrollbar__bar{display:none}.upload-card-wrapper[data-v-5e12bf57]{position:relative;overflow:visible}.folder-upload-input[data-v-5e12bf57]{display:none}.folder-upload-icon-button[data-v-5e12bf57]{position:absolute;right:18px;bottom:18px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;box-sizing:border-box;padding:0;border:1px solid var(--glass-border);border-radius:9px;background:var(--glass-bg);color:var(--el-text-color-secondary);font-size:11px;line-height:1;cursor:pointer;transition:color .2s ease,background-color .2s ease,border-color .2s ease}.folder-upload-icon-button[data-v-5e12bf57]:hover{color:var(--primary-color-accent);border-color:color-mix(in srgb,var(--primary-color) 48%,var(--glass-border));background:color-mix(in srgb,var(--primary-color) 14%,var(--glass-bg))}.folder-upload-icon-button[data-v-5e12bf57]:focus-visible{outline:none;color:var(--primary-color-accent);border-color:color-mix(in srgb,var(--primary-color) 60%,var(--glass-border));background:color-mix(in srgb,var(--primary-color) 14%,var(--glass-bg))}.folder-upload-icon-button.upload-list-busy[data-v-5e12bf57]{right:12px;bottom:12px;width:26px;height:26px;border-radius:8px;font-size:10px}@media (max-width:768px){.folder-upload-icon-button[data-v-5e12bf57]{right:10px;bottom:10px;width:26px;height:26px;border-radius:8px;font-size:10px}}.upload-card-glow[data-v-5e12bf57]{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-5e12bf57]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-5e12bf57]{width:70vw}}.upload-card-busy[data-v-5e12bf57] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-5e12bf57] .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-5e12bf57] .el-upload:focus .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-5e12bf57] .el-upload-dragger.is-dragover,[data-v-5e12bf57] .el-upload-dragger:hover{opacity:.7;box-shadow:var(--glass-shadow)}.is-uploading[data-v-5e12bf57] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-5e12bf57]{position:relative;background:none}.upload-card.is-uploading[data-v-5e12bf57]: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-5e12bf57 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-5e12bf57]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-5e12bf57]{font-size:small}}.el-upload__text.upload-list-busy[data-v-5e12bf57]{font-size:small}.el-icon--upload[data-v-5e12bf57]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-5e12bf57]{color:#6b6b73}.el-upload__text[data-v-5e12bf57] em{color:#1d4ed8}html.dark .el-upload__text[data-v-5e12bf57] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-5e12bf57]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-5e12bf57]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-5e12bf57]{font-size:30px}}.paste-card[data-v-5e12bf57]{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-5e12bf57]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-5e12bf57]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-5e12bf57]: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-5e12bf57 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-5e12bf57] .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-5e12bf57]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-5e12bf57]{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-5e12bf57]{height:50%}.upload-card-textarea[data-v-5e12bf57]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-5e12bf57]: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-5e12bf57] .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-5e12bf57] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-5e12bf57] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-5e12bf57] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-5e12bf57] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-5e12bf57] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-5e12bf57] ::-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-5e12bf57] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-5e12bf57]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-5e12bf57]{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-5e12bf57]: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-5e12bf57]: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-5e12bf57]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-5e12bf57]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-5e12bf57]{margin-top:10px}.paste-card-method-group[data-v-5e12bf57]{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-5e12bf57]: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-5e12bf57]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-5e12bf57]{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-5e12bf57],.paste-card-method-button[data-v-5e12bf57]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-5e12bf57]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-5e12bf57]{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-5e12bf57]{height:var(--upload-card-busy-height);min-height:0;max-height:var(--upload-card-busy-height);padding:5px}.upload-card-textarea[data-v-5e12bf57]{margin-top:4px;width:calc(100% - 4px)!important;min-height:0;flex-shrink:1}.upload-card-textarea[data-v-5e12bf57] .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-5e12bf57]{flex:0 0 auto;width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-5e12bf57]{letter-spacing:.02em;padding:0 10px}.paste-card-upload-button[data-v-5e12bf57],.upload-card-busy .paste-card-upload-button[data-v-5e12bf57]{height:28px;min-width:56px;border-radius:7px!important;font-size:11px}.upload-card-busy .paste-card-actions[data-v-5e12bf57]{margin-top:6px}.paste-card-method-group[data-v-5e12bf57]{width:112px;height:28px;padding:2px;border-radius:8px}.paste-card-method-group[data-v-5e12bf57]:before{top:2px;left:2px;width:calc(50% - 3px);height:calc(100% - 4px);border-radius:6px}.paste-card-method-button[data-v-5e12bf57]{height:22px;padding:0 8px;font-size:10px;border-radius:6px}}.upload-list-dashboard[data-v-5e12bf57]{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}[data-v-5e12bf57] .el-upload-dragger{position:relative;overflow:hidden}[data-v-5e12bf57] .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-5e12bf57] .el-upload-dragger:after,[data-v-5e12bf57] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-5e12bf57] .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-5e12bf57]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-5e12bf57 60s linear infinite}.upload-card[data-v-5e12bf57]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-5e12bf57 40s linear infinite,starPulse-5e12bf57 4s ease-in-out infinite}@keyframes starScroll-5e12bf57{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-5e12bf57{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-5e12bf57]{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-5e12bf57]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-5e12bf57]{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-5e12bf57]:focus,.modern-action-btn[data-v-5e12bf57]:focus-visible{outline:none!important}.modern-action-btn[data-v-5e12bf57]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-5e12bf57]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-5e12bf57]:hover:before{opacity:.08}.modern-action-btn[data-v-5e12bf57]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-5e12bf57]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-5e12bf57]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-5e12bf57]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-5e12bf57]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-5e12bf57]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-5e12bf57]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-5e12bf57]{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-5e12bf57]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-5e12bf57]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-5e12bf57]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-5e12bf57]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-5e12bf57]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-5e12bf57]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-5e12bf57]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-5e12bf57]{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-2122c62a]{border:1px solid var(--glass-border);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-2122c62a]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-2122c62a]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-2122c62a]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-2122c62a]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-2122c62a]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-2122c62a]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-2122c62a]{transform:rotate(40deg)}.theme_toggle_g[data-v-2122c62a]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-2122c62a],.icon-fade-leave-active[data-v-2122c62a]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-2122c62a],.icon-fade-leave-from[data-v-2122c62a]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-2122c62a]{display:inline-block}.container[data-v-06705292]{background:var(--bg-color);min-height:100vh}.rotate[data-v-06705292]{animation:spin-06705292 2s ease-in-out}.scale[data-v-06705292]{animation:scale-06705292 .5s ease-in-out}@keyframes spin-06705292{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-06705292{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-06705292{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-06705292{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-06705292{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-06705292]{display:inline-block}.mobile-only[data-v-06705292]{display:none}@media (max-width:768px){.desktop-only[data-v-06705292]{display:none!important}.mobile-only[data-v-06705292]{display:flex!important}}.toggle-dark-button[data-v-06705292]{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-06705292]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-06705292]{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-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-06705292]{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-06705292]{width:2rem;height:2rem}}.upload-method-icon[data-v-06705292]{outline:none}.more-button .svg-inline--fa[data-v-06705292],.upload-method-button .svg-inline--fa[data-v-06705292]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.2em}.mobile-more-dropdown[data-v-06705292]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-06705292]{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-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-06705292]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-06705292]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-06705292],.upload-folder-container[data-v-06705292]{right:58px}}.upload-folder[data-v-06705292]{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-06705292]{width:200px}@media (max-width:768px){.upload-folder[data-v-06705292]{width:80px;height:2rem}.upload-folder.active[data-v-06705292]{width:120px}}.directory-tree-trigger[data-v-06705292]{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-06705292]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-06705292]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.1em}}.upload-folder[data-v-06705292] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-06705292] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-06705292] .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-06705292] .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-06705292] .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-06705292] .el-input__wrapper.is-focus,.upload-folder[data-v-06705292] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-06705292]{--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-06705292],.mobile-more-button[data-v-06705292],.more-dropdown .more-button[data-v-06705292],.quick-toolbar[data-v-06705292],.toggle-dark-button[data-v-06705292],.upload-method-button[data-v-06705292]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-06705292]{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-06705292]{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-06705292]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-06705292]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-06705292]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-06705292]{margin-top:4px}.quick-toolbar-icon[data-v-06705292]{font-size:16px}.quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(0deg)}.info-container[data-v-06705292]:hover,.quick-toolbar-button[data-v-06705292]: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-06705292]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-06705292]:hover{transform:none}.toggle-dark-button[data-v-06705292]:hover,.upload-method-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292]: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-06705292]: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-06705292]{--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-06705292]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-06705292]{gap:2px}.quick-toolbar-more[data-v-06705292]{margin-top:3px}.quick-toolbar-icon[data-v-06705292]{font-size:14px}}[data-v-06705292] .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-06705292]{display:flex;justify-content:center;margin-top:20px}.header[data-v-06705292]{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-06705292]{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-06705292 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-06705292]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-06705292]: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-06705292]:hover:after{width:80%}.main-title[data-v-06705292]{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-06705292]{opacity:0}.title[data-v-06705292]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-06705292]{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-06705292]{animation:crayonWrite-06705292 .82s steps(18) forwards,crayonScratch-06705292 .16s steps(2) .82s 3}@keyframes float-06705292{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-06705292{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-06705292{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-06705292]{font-size:1.55rem;letter-spacing:1px}.title[data-v-06705292]:hover{transform:scale(1.05)}}.upload-home[data-v-06705292]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-06705292]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-06705292]{padding:8px 15px 4px;top:-2.5vh}.title[data-v-06705292]{padding-bottom:5px}.upload[data-v-06705292]{top:-3.8vh}}.footer[data-v-06705292]{height:6vh} \ No newline at end of file diff --git a/frontend-dist/css/318.5939769e.css.gz b/frontend-dist/css/927.b1a356fd.css.gz similarity index 57% rename from frontend-dist/css/318.5939769e.css.gz rename to frontend-dist/css/927.b1a356fd.css.gz index dee905060d254f7dfd8db01eff3f4f694cf69c77..0561fe56f8a4a982c8c222503efe6e3d28a40edf 100644 GIT binary patch delta 4809 zcmV;)5;pC^U6@|5^csJpAWnAsbOnQ<#a<8?7!@r&o-fgh!JizmG4&#+&|oP{N&;vQ zrA0c@_v2Q4v%7R(Lu%3${~GBQR0~vI;2f2Lu~%*9OO5!>IOiS}Q|QX0zT=wv-p`(~ zSGil1sUN%S@Q-P5Ov=AO9Sx#!$bto1JEYr_6=kmefJQraqlABDpxSqb?5w=dj!Mp= z1wT?5i6kCR-#@mav(0S{dc3yxr7Sd@KXgT-)Cu-~EBP+9mI#8xP*Ye6)x@t!cqWG@ zw~=Dvvq*Alt}g8yqk{u{^ZL4Lim$7D;iBY}uy=uvf-G!C=A}_^ZgFuoc3nj%Tt@yp zl!cMn-pJ#;@Ns{jDRu{t0btLFE^nKvLa||R@48N(F-PcpQg|WF5|Rf}bQ7b2B|7)L z?8+Tf6ZgnLm{JHuM5utozNIG6B!VktSul{VZEg}(BG&u+XH19J|o5pT(&T!Q1Y*{;k^K5JoNKufQ4T#h5>VD+)~XhxB0`IBd@|jJbuoWk z3mMgNG!`z`{wCy^3l_g?BEM@QziT39O~fKcCf`zgr{Gqt57s@y&FUb)ggbB6g3M@R ziP#O?3Y90Y)OB+6XU%h@`Hst8XX)l!!~MII=HOwKyZIGhM+62r6$X@p}wAdSV$buxB8kw@}l6R@IBWe z+ZG_5k;~aj{}u+oX%&M9`11VeAv=Vv@OQX$aL{>xJS0y%m*8ho8X(RKh%4Oj2s*zR zOh~y0J*ya}*R{vZhHkCH-7FF6OQDYO1Mr}SU;btufgIhy3Xne3DfB((JC%RyN2I#Q z3JOQNXRwoo{q@6Ws{&g_ekB|_XkgCB0nuLf)mSJK?e54=N%reSe8HhXhHbj;I+Zm! zProGGWws_Kuvj?GQUn3XDXBa`v;e2^8%}MVCFkqONGQ7OD^>0|6~z(ce5v1pES2T# zijD2QT*!ltAMv8Yc}iXH(jR{#_F{zC)Asr_86~vA1s9fdQxpPsT8a1Z|G&|UBTR%c zCByu~4`VxpzDhQDA$I8=BCgG7sml93a&X1VL2aggSq!rBL5kQ*U_o~)UdC-giWU^8 zeggfmDRAa&7lW3gvlBTOr)y;=(4DQ|_LFedsJY!!=?>o~U6iCd9h`q}1n2ZZa4x2I zN>O&F1r#y7>n+Lpw8WxEO56PnazS0TvHP-J7^H%SEQ(u0$v%GDlFD(IYSU>;j2fl} z8brZo5867bjMJn=jS>83FFAkuzOIi^uRu*%EmNA6P3*;9G{F;)365xrD-piWK5U%Sz+Jf@U(q60M8?B8KkQACxOjGBh zBEQq=6YN0|%x$^?W;kTx*p~GhSLW;vTM%yw=6jI!DP>J-_AE+-HL2C7)Q@mc0FXF> z;vZ#VU`A`65?n0b8Slsw&wo0NMT)zc0B-h>4n{p4QH6{_tftz+A9{ZsEY_`s$?Dc} zlD0)ACg#*eGy>t0PF5kOYca@mY4BXqDJpY=qOwpG6~hR}CMFRIvZ&s!nqI`<1epGL z*Nk7APqvB}!!Y=`Gd>j{xhdDJXYP84-`u$v=Q4l$l8Pk6R@L_(9VO%#_hfg%ed zzJlY|Ely62g#S5fN_l_E4qyYZ&MI~>3Db+i|FRyMf{;1L^&&PEO-Ekj&n(cB=*gS^ zFzE9iiu>Y+;-3Cc+?PKT_tg)@ef>jmfBB)f$LSMta=0Hl?@&b2pGD|`3u+fmLI5QI znN5)w4(>IP*1Ld3JPawAw6PCM2S0HU|8W@x?Q?TR^*H_3Ipu$#!t#~%I{O3C!eTmH}E87c+yb>LO#F#7>V-C==8UIa5B=w2cBS`Ynu zlc9?^Ni~4OrC5Iic+P47lRATjgTYtE`LiQWu0HtSas!vSaW`?;PZGPX5PZaU(Srr z9<5g3`lZ&WH?hk{YCgyD_Z5A%;W)kCv&)R)k0&gy@!EgTw#N30K#vxQUOC~8fmx78 z<)KYM5U%BaqC}zL#eV+Bk~lqt@1!zF(}1 z<|59XGkDAliF#lLc{@5Nb(cNF3Esj?@Wc~MVFAj-WsMAy6Kg?-8yD?jJxRNucT)2F zOPB_`!%Tm6eTtUM5m>ifLXtm7pdrS|N-5^6M(S$75wTE`)N-Taq|@>0fqeg+=xc#H zs4XPie=S*%)f+*BsoRaAc-*CoAdCf8;|0y{nwYsfF=qTV7r8DSPp{h60Ojx3FpsO;DBf8~rq1?bCln@{;_5>sb~cZ*VepykzwCjvy2b z0AsY3a?gO!2=?VCC{#FuvV-31!lPMchls+Ws-FcMD<_DXP+iK>MDWN+DGsR~1)OHo z0*xkTC!fP$O!aHNFe!DbWF*5S){L!ItksHZRb}k~7#qE?MlW0=yg7mzm7i7`D>*2! zvJ`)ZvG0+*tvEX@xhy~z2Y9D_M&2Xv;EUxh>JFs?!Fq)4hTDa73pSpGJL#6J)zX=C ztCZ0@MHfrjr6E@GLN!OFMDB7$KT`9n+3$&(Z(4MOyc{L*lNnsT?0STIPae%;M(1-2 z_Mq*k4@Q0jC$NEGwS?j>-NMgl-#a8tYtVmn&*6*j-)zm z@7AEm%n8;s>zIQ@wImgselhbtJdhWM66BiX&o3`8FZbIq^kJ*#2Bt0JVpSE5m3%QA za+$M*T3$#X1>71`G8pQw@`YD9e~M(ud$|Q)sPKZ&3)Jg0#O8ermg1g1*WJZZJm7zt zfIlbM9H^7MlyKD{LF@xn%f@JMNA1d=dbr~LtvMW+l90qnk}s3&m#Y(-8FDV)Wphfx zv<0U@>%+fv{6CtSXObWKNU9v(W<=BBSP5sYF0G408<~S2by;rS>+A@Tnd0ZE1*h9B zM6F(X)a(^k%ZSzHyf@t^DqhSPyk~#;m-48UpJ;nZtUb{>$s81@9#mvj5WE1xV}eoY zr+YtG`{1}lsmQ!s&jMJMIZRfwI80N~3@UU_`-Z!kD*{4l{0OJ47n<5JAM9{4ol#y0 znC?74i&S!H9AM434=a$p1Jj3BOVTtt-5eR`Bj~`0ezgzD)X1rb;d;;zgBO27CK>a- zxf7xa5F@DpsM52#L zF&Zim?l$aP*24=gk>(VQ$J!izz}m|^%3oda9lOtN)mjU(6KDk-b$4?KOv8U}xVHfY={h4^mg`Oel6Te0~cH(7pA|IcVzYOJzX)syQ_~Sbo;tWF%vwTfge% zjYH2+=i(aOLb9iz6O!o7$QoNUuhAp|?zwxMl*#Yb)23^R8f{Z!7Mg#vTzPBW!xGG=@lV7JEg*d^PF!e%l($0TJ|m_p zDO36eT@`W^J0X8%gmBUuxE#%Y55xyEskdI=hwyYXVWI)zCp>+KVrIj~{Ly(X`M;Mk ze+&Aif$73j`4a@f2P6avZ+`MStX1MqxI%v_0H3BHkyJcV#2}SSELeOQfw>%?oy+e* zS1T4hl|+%4B1ZHsdwF^AdjH-#(1l(yEGBN5GnYfbY>Iz9Wj4Z3GZ!o8%<)kE<8E6+ z9b=m|dmUqPOTiZdye;4HPN?RjHm1a#)<_EJBSDLdlp=2ugUh^YNf;?=lj0zWJ}Fv5 zL~=+O4%D;ap)HFo{3qza=?pI*g0}hSHqpKnV&C!bhFZXU4P2)(Qh$Ah`Us~c22EQ+ z2NVp_qeXwu*(|9@d10#LAc~i>coxoQu|E@V9Ql^rziL8bY%L`M<77tXtS&&|xzb)k z?s(ryH0FJkW0}e*35X$l!oUJJ`N4?MV3Jg)4zxq|6~#G9L8x+6UPPiq^`?IeT=OAN$VOQ2Aq?m}e!Xujb``82 z&fKKB-3azWCS3|Jv2UT%{FUw;GZxMcdo?Ak(~kZ9_C-S%+T-SL`&jcmh(CU;F`Gc{ zIw?GSPCyxe)QY&L?DH9ByPP2a%l9KpvIm{TfA&EA{@i7I5Woys0g8YmyOi(ye8h{h z_91_%6W_6^iXi7kWK8=Y3E-K$Pt5PwC*a<4(;re{8iM9<{bsLc4AtiKOuyiZ=8$J% zjEg~YFeOA}ghDpr@CdSER1I;r`wltsQ!(>(`hL{KTI1d+5gx8PriWQA#?FNx}pf2;>Cz==VN5mDShgU$TF^+?RPX`{$-_yuW01=l$i+vo5Qv2tVGTGRj$AkdDtgkVZN&w8<=mr|!~}mB z%S&B=7W;T9IV0v`1v+v^m724_niMm+t3klnW`WR#UQa#U!cztpw|=Q;c$rZf6qIQM;Rq<_2=Ry@^EYy%q(+9N!x8WQ-GOteo-j5hmf>VPlS zr|~lw_>Zw26k{=WMVt_JL(&pzH-wWFEg1!?Q4d8SlQS)T0t(iXvn`wg+~Jc^E>IyF jYK-kGEU6Z<=0*2n||(Ki>WyP57u)lr8}PwdFh4 delta 4703 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 diff --git a/frontend-dist/index.html b/frontend-dist/index.html index 5f8cccaf..23144d9f 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 d7f51e70d0545aa9ae852dda57eb1dce83698316..728c1fed9e1da502f21730227cf74f959e683542 100644 GIT binary patch delta 531 zcmV+u0_^>w1fc|w8Gm$XsT4=55EA7CLI`fiu_uYUwkO!*Ec@@#Cfm|&g@B8tXU%)_ z@jR|y7}C5S5eD|IsShVO6?!Q|QxB+2Q+s3udQdSTOOd%N-iYJvz&sZCBil)eZ^f6J z;w|}6v27g+&=eR0OL6;7qUrIT6qH9PCX2g~B0q}TS;K=gIDc7<#SB(9ShmU)Nh^o) zeC5?o>$88rIbocEY8}czt9#j^vn(}D7)4V%8@3S9Nntew0Yk)2iYl>Ut1FMjs>)GM zyE$(*|O?oD`I_j-XR90ZU>K{SvC>uyjQ9X53 zWgaL#6aHjHQ?q4<%}L>PwOrOqi(s(Bcxbu9C?G{GMRk`dJ>;-0CJcsRDlcDcE-p6f zw!BNCsjG$hHwiV4<<+&m#@F5D6XNXG(I1_jX6vrC*?(NE&r6+>SZqzacbEo57SGvp zqVu&jc(wTxr&^Y(C9`kpKo1>oq|i5C@hl=Fig6EZW=QkIzFXf9xdlU*!WqMk;ugk8 zBSyD}o#lZt!v{5~&&wb%9QMJK@X?`4c*I~Cm}Y-$$XM3ZF>77@F2vXgteKzwp;}|7 VrmmK1s|@*%_yrpE6Ff5n0010W{k8xA delta 532 zcmV+v0_**u1fm3x8GkhD7Ac8TAtcHPR3W$_$DSna+MZyKv*h2S&2E=&D+F9DJ!{^Z zkLPjqN|WMwL>SoFrrMuirSEGYnrc9)o5~?eP=gE+xfY4L>_!}K2j(%uAIVI$_?CUS z&EAn4C7afw07ahBb1m-P*Qk4ZBzftu7L&oHCt z_2tURpT;G3!YN`{fNU++o>q^tS!cLbG+_`;WsToLKwAr=$O{+(cC{!XOE#)-sEsTv z^^}jkKMR-RXfb0-YRLYR>SWyh3kMWg3blCMm2J6RpASi6RKbjF_A;kA-Ag|wgge)N zNG)V=3yw4f4}YDp2m?hnzK79D?kKo(#VyV|3Oc@!TOIXQXDTZ&PWDfrvXnGLrXZg? zDiaSBUI>3SqN&)h#pbN=syJL$hZaF&hhg7xhe1FLsusmVEYy(vHk;6E3NgQaQ(j$_ z>o$LgqN$1l^=}e#9P^uNRc7+j8B+X#W8DD{4PYB35;Hz{=Qmm Wrlu+m)eRQQAMp!Gp0a{71ONcxgZxMU diff --git a/frontend-dist/js/318.0e6c0e43.js b/frontend-dist/js/318.0e6c0e43.js deleted file mode 100644 index da6c6b41..00000000 --- a/frontend-dist/js/318.0e6c0e43.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[318],{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 s=["href","target"],i=["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,i)],10,s)}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)},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 i}),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 k}),o.d(t,"EImageType",function(){return a}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(a||(a={}));var s=function(e,t,o,a){return new(o||(o=Promise))(function(l,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,n)}r((a=a.apply(e,t||[])).next())})};function i(e,t=.92,o=a.JPEG){return s(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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s=atob(o[1]);let i=s.length;const n=new Uint8Array(i);for(;i--;)n[i]=s.charCodeAt(i);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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s,i;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;i=e.width*t,s=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,s=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(a.height=i,a.width=s):(a.height=s,a.width=i),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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s=o.split(",")[0].match(/:(.*?);/)[1],n=a.JPEG;l(t.type)&&(n=t.type,s=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),f=yield d(h,s);return f.size>e.size?e:f})}function k(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,s=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 k=[null,null];for(let e=1;e<=7;e++){y=yield i(g,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...k].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-s)-Math.abs(.75*t.length-s))[0]);break}if(ot))break;k[0]=y,b+=Math.pow(.5,e+1)}}const v=yield d(y,u);return v.size>e.size?e:v})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},17879:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var a=o(56768),l=o(45130),s=o(24232);const i={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,s.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",i,[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-2122c62a"]]);var m=h},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)),s=(o(37952),o(30650)),i=(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"},k={class:"node-label"};function v(e,t,o,v,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=i.qk,$=s.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",k,(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",v],["__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)},50333:function(e,t,o){"use strict";o(85331),o(29092)},58318:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Bo}});var a=o(78507),l=(o(85331),o(213),o(80047)),s=(o(99648),o(56768)),i=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"},k={class:"grid-actions"},v={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"},D={key:0,class:"load-more-container"},E={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},P={key:1,class:"no-more-hint"},N={key:1,class:"empty-state"};function z(e,t,o,z,W,V){const B=(0,s.g2)("font-awesome-icon"),H=l.S2,Q=a.R7;return(0,s.uX)(),(0,s.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,s.Lk)("div",n,[(0,s.Lk)("div",r,[(0,s.Lk)("h2",null,(0,i.v_)(e.$t("uploadHistory.title")),1),(0,s.Lk)("span",d,(0,i.v_)(e.$t("uploadHistory.totalRecords",{count:W.totalCount})),1)]),(0,s.Lk)("div",c,[(0,s.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(H,{circle:"",onClick:V.toggleViewMode},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"grid"===W.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,s.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(H,{circle:"",type:"danger",onClick:V.clearHistory},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,s.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"times"})]),_:1})])]),W.historyList.length>0?((0,s.uX)(),(0,s.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>V.handleScroll&&V.handleScroll(...e))},[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(V.groupedHistory,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.date,class:"history-group"},[(0,s.Lk)("div",u,[t[4]||(t[4]=(0,s.Lk)("div",{class:"timeline-dot"},null,-1)),(0,s.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===W.viewMode?((0,s.uX)(),(0,s.CE)("div",h,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.items,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.time,class:"grid-item"},[(0,s.Lk)("div",m,[V.isImage(e.name)?((0,s.uX)(),(0,s.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,f)):V.isVideo(e.name)?((0,s.uX)(),(0,s.CE)("video",{key:1,src:e.url,muted:""},null,8,g)):((0,s.uX)(),(0,s.CE)("div",y,[(0,s.bF)(B,{icon:"file",class:"file-icon"})])),(0,s.Lk)("div",b,[(0,s.Lk)("div",k,[(0,s.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,s.Lk)("div",v,[(0,s.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,C),(0,s.Lk)("div",w,(0,i.v_)(V.formatTime(e.time)),1)])]))),128))])):((0,s.uX)(),(0,s.CE)("div",F,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.items,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.time,class:"list-item"},[(0,s.Lk)("div",L,[V.isImage(e.name)?((0,s.uX)(),(0,s.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,U)):V.isVideo(e.name)?((0,s.uX)(),(0,s.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,s.uX)(),(0,s.CE)("div",S,[(0,s.bF)(B,{icon:"file"})]))]),(0,s.Lk)("div",T,[(0,s.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,_),(0,s.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,x)]),(0,s.Lk)("div",A,[(0,s.Lk)("div",M,(0,i.v_)(V.formatTime(e.time)),1)]),(0,s.Lk)("div",R,[(0,s.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),V.hasMore?((0,s.uX)(),(0,s.CE)("div",D,[W.loadingMore?((0,s.uX)(),(0,s.CE)("div",E,[(0,s.bF)(B,{icon:"spinner",spin:""}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadHistory.loading")),1)])):((0,s.uX)(),(0,s.CE)("div",I,(0,i.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):W.historyList.length>0?((0,s.uX)(),(0,s.CE)("div",P,(0,i.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,s.Q3)("",!0)],544)):((0,s.uX)(),(0,s.CE)("div",N,[(0,s.bF)(B,{icon:"history",class:"empty-icon"}),(0,s.Lk)("p",null,(0,i.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var W={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"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${a}-${l} ${s}:${i}:${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)}}},V=o(71241);const B=(0,V.A)(W,[["render",z],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),q=(o(15616),o(81418)),j=(o(50333),o(74757)),O=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(97769));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},ae={class:"setting-item"},le={class:"setting-label"},se={key:0,class:"setting-item"},ie={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},fe={class:"dialog-section"},ge={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ke={class:"setting-item"},ve={class:"setting-label"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Se={key:1,class:"setting-item slider-item"},Te={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Ae={key:0,class:"dialog-section"},Me={class:"section-header"},Re={class:"section-title"},De={class:"section-content"},Ee={class:"setting-item"},Ie={class:"setting-label"},Pe={class:"dialog-action"};function Ne(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,s.g2)("font-awesome-icon"),m=a.R7,f=K.P9,g=K.AV,y=G.WK,b=O.qi,k=j.B8,v=q.lq,C=l.S2,w=X.kZ;return(0,s.uX)(),(0,s.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",Z,[(0,s.Lk)("div",ee,[(0,s.Lk)("span",te,(0,i.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,s.Lk)("div",oe,[(0,s.Lk)("div",ae,[(0,s.Lk)("span",le,(0,i.v_)(e.$t("uploadSettings.channelType")),1),(0,s.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"telegram",class:"channel-icon"}),t[13]||(t[13]=(0,s.Lk)("span",null,"TG",-1))]),_:1}),(0,s.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"cfr2",class:"channel-icon"}),t[14]||(t[14]=(0,s.Lk)("span",null,"R2",-1))]),_:1}),(0,s.bF)(u,{label:"s3",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"s3",class:"channel-icon"}),t[15]||(t[15]=(0,s.Lk)("span",null,"S3",-1))]),_:1}),(0,s.bF)(u,{label:"discord",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"discord",class:"channel-icon"}),t[16]||(t[16]=(0,s.Lk)("span",null,"DC",-1))]),_:1}),(0,s.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"huggingface",class:"channel-icon"}),t[17]||(t[17]=(0,s.Lk)("span",null,"HF",-1))]),_:1}),(0,s.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"webdav",class:"channel-icon"}),t[18]||(t[18]=(0,s.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,s.uX)(),(0,s.CE)("div",se,[(0,s.Lk)("span",ie,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(g,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(o.currentChannelList,e=>((0,s.uX)(),(0,s.Wv)(f,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,s.Q3)("",!0),(0,s.Lk)("div",ne,[(0,s.Lk)("span",re,(0,i.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,s.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,s.Lk)("div",de,[(0,s.Lk)("span",ce,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,s.Lk)("div",ue,[(0,s.Lk)("div",pe,[(0,s.Lk)("span",he,(0,i.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,s.Lk)("div",me,[(0,s.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{label:"default",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"cog",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,s.bF)(u,{label:"index",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,s.bF)(u,{label:"origin",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,s.bF)(u,{label:"short",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,s.Lk)("div",fe,[(0,s.Lk)("div",ge,[(0,s.Lk)("span",ye,(0,i.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,s.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",be,[(0,s.Lk)("div",ke,[(0,s.Lk)("span",ve,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,s.Lk)("div",Ce,[(0,s.Lk)("span",we,(0,i.v_)(e.$t("uploadSettings.fileCompress")),1),(0,s.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,s.uX)(),(0,s.CE)("div",Fe,[(0,s.Lk)("span",Le,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",Ue,[(0,s.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,s.Lk)("div",$e,[(0,s.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=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[19]||(t[19]=(0,s.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,s.Q3)("",!0),o.customerCompress?((0,s.uX)(),(0,s.CE)("div",Se,[(0,s.Lk)("span",Te,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",_e,[(0,s.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=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,s.Lk)("div",xe,[(0,s.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=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[20]||(t[20]=(0,s.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,s.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,s.uX)(),(0,s.CE)("div",Ae,[(0,s.Lk)("div",Me,[(0,s.Lk)("span",Re,(0,i.v_)(e.$t("uploadSettings.serverCompress")),1),(0,s.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",De,[(0,s.Lk)("div",Ee,[(0,s.Lk)("span",Ie,(0,i.v_)(e.$t("uploadSettings.enableCompress")),1),(0,s.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,s.Q3)("",!0),(0,s.Lk)("div",Pe,[(0,s.bF)(C,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var ze={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{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:""},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"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const We=(0,V.A)(ze,[["render",Ne]]);var Ve=We,Be=o(88559),He=(o(85970),o(813)),Qe=(o(34896),o(69655)),Xe=(o(2893),o(74253));o(79899);const qe={class:"upload-list-item"},je=["href"],Oe={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},at={key:1,class:"upload-list-item-progress"},lt={class:"upload-list-item-action"};function st(e,t,o,a,l,n){const r=(0,s.g2)("font-awesome-icon"),d=Xe.$g,c=G.WK,u=Qe.ve,p=(0,s.g2)("Link"),h=He.tk,m=(0,s.g2)("Delete");return(0,s.uX)(),(0,s.CE)("div",qe,[(0,s.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,s.uX)(),(0,s.CE)("video",Oe,[(0,s.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,s.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,s.uX)(),(0,s.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,Ke)):((0,s.uX)(),(0,s.CE)("div",Je,[(0,s.bF)(r,{icon:"file",class:"file-icon"})]))],8,je),(0,s.Lk)("div",Ye,[(0,s.Lk)("div",Ze,[(0,s.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,s.uX)(),(0,s.CE)("div",et,[(0,s.Lk)("div",tt,[(0,s.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,s.k6)(()=>[...t[8]||(t[8]=[(0,s.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,s.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,s.k6)(()=>[...t[9]||(t[9]=[(0,s.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,s.Lk)("div",ot,[(0,s.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,s.k6)(()=>[...t[10]||(t[10]=[(0,s.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,s.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,s.k6)(()=>[...t[11]||(t[11]=[(0,s.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,s.uX)(),(0,s.CE)("div",at,[(0,s.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,s.Lk)("div",lt,[(0,s.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,s.bF)(h,null,{default:(0,s.k6)(()=>[(0,s.bF)(p)]),_:1})]),(0,s.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,s.bF)(h,null,{default:(0,s.k6)(()=>[(0,s.bF)(m)]),_:1})])])])}var it=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:it.Link,Delete:it.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 nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.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 s=l.length+4,i=t-s-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+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 ct=(0,V.A)(dt,[["render",st],["__scopeId","data-v-645a7810"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(47358)),ft=o(45130);const gt={class:"upload-form"},yt={class:"upload-card-glow",ref:"uploadCardGlow"},bt=["innerHTML"],kt=["aria-label"],vt={key:0,class:"upload-card"},Ct={class:"paste-card-actions"},wt=["aria-label"],Ft=["aria-pressed"],Lt=["aria-pressed"],Ut={class:"upload-list-container"},$t={class:"upload-list-dashboard-action"},St={class:"modern-action-group"},Tt={class:"modern-dropdown-item-content"},_t={class:"modern-action-btn modern-action-btn-danger"};function xt(e,t,n,r,d,c){const u=He.tk,p=(0,s.g2)("font-awesome-icon"),h=a.R7,m=mt.j5,f=G.WK,g=l.S2,y=ht.Ik,b=(0,s.g2)("List"),k=(0,s.g2)("Checked"),v=(0,s.g2)("Failed"),C=Xe.$g,w=O.qi,F=pt.c6,L=pt.Iy,U=pt.dW,$=ut,S=Be.kA;return(0,s.uX)(),(0,s.CE)("div",gt,[(0,s.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,ft.D$)((...e)=>c.handleDrop&&c.handleDrop(...e),["stop","prevent"]))},[(0,s.Lk)("div",yt,null,512),"default"===n.uploadMethod?((0,s.uX)(),(0,s.Wv)(m,{key:0,class:(0,i.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,s.k6)(()=>[(0,s.bF)(u,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[...t[12]||(t[12]=[(0,s.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,s.Lk)("path",{d:"M12 7v10"}),(0,s.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,s.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,bt),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.selectFolderUpload"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.Lk)("button",{type:"button",class:(0,i.C4)(["folder-upload-icon-button",{"upload-list-busy":d.fileList.length}]),"aria-label":e.$t("upload.selectFolderUpload"),onClick:t[0]||(t[0]=(0,ft.D$)((...e)=>c.openFolderPicker&&c.openFolderPicker(...e),["stop","prevent"]))},[(0,s.bF)(p,{icon:"folder-open"})],10,kt)]),_:1},8,["disabled","content"])]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,s.Q3)("",!0),(0,s.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,s.uX)(),(0,s.CE)("div",vt,[(0,s.bF)(y,{class:(0,i.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[(0,s.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,s.Lk)("div",Ct,[(0,s.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,s.Lk)("div",{class:(0,i.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,s.Lk)("button",{class:(0,i.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,i.v_)(e.$t("upload.pasteSave")),11,Ft),(0,s.Lk)("button",{class:(0,i.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,i.v_)(e.$t("upload.pasteExternal")),11,Lt)],10,wt)])]),_:1},8,["class"])])):(0,s.Q3)("",!0),(0,s.bF)(y,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[(0,s.Lk)("div",Ut,[(0,s.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,s.bF)(C,{class:"upload-list-dashboard-title"},{default:(0,s.k6)(()=>[(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(b)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(k)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadSuccessCount)+" ",1),(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(v)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadErrorCount),1)]),_:1}),(0,s.Lk)("div",$t,[(0,s.Lk)("div",St,[(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[8]||(t[8]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,s.bF)(p,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(U,null,{dropdown:(0,s.k6)(()=>[(0,s.bF)(L,{class:"modern-dropdown-menu"},{default:(0,s.k6)(()=>[(0,s.bF)(F,null,{default:(0,s.k6)(()=>[(0,s.Lk)("div",Tt,[(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadForm.autoRetry")),1),(0,s.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,s.k6)(()=>[(0,s.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[9]||(t[9]=(...e)=>c.retryError&&c.retryError(...e))},[(0,s.bF)(p,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(U,null,{dropdown:(0,s.k6)(()=>[(0,s.bF)(L,{class:"modern-dropdown-menu"},{default:(0,s.k6)(()=>[(0,s.bF)(F,{onClick:c.clearFileList},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,s.bF)(F,{onClick:c.clearSuccessList},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,s.k6)(()=>[(0,s.Lk)("button",_t,[(0,s.bF)(p,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(d.fileList.slice().reverse(),e=>((0,s.uX)(),(0,s.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 At=o(457),Mt=o(76334),Rt=o(60782);function Dt(e,t,o){const a=o+e;return{finalURL:a,mdURL:`![${t}](${a})`,htmlURL:`${t}`,ubbURL:`[img]${a}[/img]`}}function Et(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function It(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=Dt(e.srcID,e.name,t);Object.assign(e,o)})}const Pt=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]),Nt=(e,t)=>e>>>t|e<<32-t;function zt(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=Nt(o[u-15],7)^Nt(o[u-15],18)^o[u-15]>>>3,t=Nt(o[u-2],17)^Nt(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[a,l,s,i,n,r,d,c]=t;for(let u=0;u<64;u++){const e=Nt(n,6)^Nt(n,11)^Nt(n,25),t=n&r^~n&d,p=c+e+t+Pt[u]+o[u]>>>0,h=Nt(a,2)^Nt(a,13)^Nt(a,22),m=a&l^a&s^l&s,f=h+m>>>0;c=d,d=r,r=n,n=i+p>>>0,i=s,s=l,l=a,a=p+f>>>0}t[0]=t[0]+a>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+s>>>0,t[3]=t[3]+i>>>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 Wt(){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 s=0;if(o>0){const a=64-o,i=Math.min(a,l.length);t.set(l.subarray(0,i),o),o+=i,s=i,64===o&&(zt(t,e),o=0)}while(s+64<=l.length)zt(l.subarray(s,s+64),e),s+=64;s56&&(t.fill(0,o,64),zt(t,e),o=0),t.fill(0,o,56);const s=new DataView(t.buffer);s.setUint32(56,Math.floor(l/4294967296),!1),s.setUint32(60,l>>>0,!1),zt(t,e);let i="";for(let t=0;t<8;t++)i+=e[t].toString(16).padStart(8,"0");return i}}}async function Vt(e){const t=Wt(),o=4194304;let a=0;while(ae&&"."!==e).map(e=>".."===e?"_":e).join("/")}function Ht(e=""){const t=Bt(e),o=t.lastIndexOf("/");return-1===o?"":t.slice(0,o)}function Qt(e="",t=""){const o=/^[\\/]/.test(String(e).trim()),a=[Bt(e),Bt(t)].filter(Boolean).join("/");return a?o?`/${a}`:a:""}function Xt(e=[]){return Array.from(e).map(e=>({file:e,relativePath:Bt(e.webkitRelativePath||e.relativePath||e.name)}))}function qt(e){return new Promise((t,o)=>e.file(t,o))}async function jt(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 Ot(e,t,o){const a=Bt([t,e.name].filter(Boolean).join("/"));if(e.isFile){const t=await qt(e);return void o.push({file:t,relativePath:a})}if(e.isDirectory){const t=await jt(e);for(const e of t)await Ot(e,a,o)}}async function Gt(e,t,o){const a=Bt([t,e.name].filter(Boolean).join("/"));if("file"!==e.kind){if("directory"===e.kind)for await(const l of e.values())await Gt(l,a,o)}else o.push({file:await e.getFile(),relativePath:a})}async function Kt(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(){It(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&It(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Rt.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},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),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),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=Qt(this.uploadFolder,Ht(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=Xt(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 Kt(t.items):Xt(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 s=l.length+4,i=t-s-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+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,s="external"===a?"default":this.uploadNameType,i=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 Vt(e.file);r.append("sha256",t),console.log("SHA256 computed:",t)}catch(d){console.error("Failed to compute SHA256:",d)}(0,At.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+a+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+s+"&autoRetry="+l+"&uploadFolder="+encodeURIComponent(i),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,s=e.file.size,i=e.file.type||"application/octet-stream",n=Math.ceil(s/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 Vt(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",i),t.append("totalChunks",n.toString());const m=await(0,At.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 k=0,v=!1,C="",w=!1;const F=async t=>{if(v||w)return;const p=t*l,m=Math.min(p+l,s),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",i);let k=0;const F=3;while(k{if(v||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(k++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${k}/${F}):`,h),k>=F)throw v=!0,C=`分块 ${t+1}/${n} 上传失败: ${h.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*k))}}},L=[];for(let e=0;e{while(kt.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,At.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=Dt(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(Et(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 s=a.type.includes("image")&&this.customerCompress&&a.size/1024/1024>this.compressBar,i=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(s)Mt.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 s=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;n(l,s)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:a.name})),o(e)});else if(i){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=>Et(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")})},async handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData;if(!t)return;const o=Array.from(t.items||[]),a=o.filter(e=>"file"===e.kind),l=o.filter(e=>"string"===e.kind);if(a.length>0){e.preventDefault();const t=await Kt(a);t.length&&await this.uploadLocalEntries(t)}else t.files?.length&&(e.preventDefault(),await this.uploadLocalEntries(Xt(t.files)));l.length>0&&this.uploadFromUrl(l)},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`,i=`[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:s,ubbURL:i,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)&&At.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 s=o.headers["content-disposition"];if(s){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(s);if(null!=o&&o[1]){a=o[1].replace(/['"]/g,"");try{a=decodeURIComponent(a)}catch(l){a=""}}""===a&&(o=t.exec(s),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 i=o.data,n=new File([i],a,{type:i.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 Vt(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()),s=btoa(String.fromCharCode(...l));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const i=await(0,At.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:s,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:a},withAuthCode:!0,signal:o.signal});if(!i.data.success)throw new Error(i.data.error||"Failed to get upload URL");const n=i.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,At.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:s}=a,i=parseInt(s.chunk_size),n=Object.keys(s).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);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*i,l=Math.min(a+i,e.file.size),n=e.file.slice(a,l);console.log(`Uploading part ${u}/${d}`);const c=await fetch(s[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"),s=l.getContext("2d");a.onload=()=>{l.width=a.width,l.height=a.height,s.drawImage(a,0,0),l.toBlob(l=>{if(l){const o=e.name,a=o.lastIndexOf("."),s=a>0?o.substring(0,a)+".webp":o+".webp",i=new File([l],s,{type:"image/webp"});i.uid=e.uid,this.copyUploadPath(e,i),t(i)}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 Yt=(0,V.A)(Jt,[["render",xt],["__scopeId","data-v-81dfc90a"]]);var Zt=Yt,eo=o(732),to=o(33892);const oo={class:"directory-suggestion-input",ref:"wrapperRef"},ao={class:"suggestion-dropdown"},lo={class:"suggestion-list"},so=["title","onMousedown"];function io(e,t,o,a,l,n){const r=G.WK;return(0,s.uX)(),(0,s.CE)("div",oo,[(0,s.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,s.bo)((0,s.Lk)("div",ao,[(0,s.Lk)("ul",lo,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(l.suggestions,(e,t)=>((0,s.uX)(),(0,s.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,ft.D$)(t=>n.selectItem(e),["prevent"])},(0,i.v_)(e.value),41,so))),128))])],512),[[ft.aG,l.dropdownVisible&&l.suggestions.length>0]])],512)}var no={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 At.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]||"",s=a.slice(0,-1).filter(Boolean),i=s.length>0?`/${s.join("/")}/`:"/";return{segmentInput:l,parentPath:i}},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 ro=(0,V.A)(no,[["render",io],["__scopeId","data-v-28b8eda7"]]);var co=ro,uo=o(17879);const po={class:"container"},ho={class:"upload-home"},mo={class:"quick-toolbar-actions"},fo={class:"quick-toolbar-actions-inner"},go={class:"header"},yo={class:"title"},bo={class:"title-crayon-text","aria-hidden":"true"},ko={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},vo={class:"dialog-section"},Co={class:"section-header"},wo={class:"section-title"},Fo={class:"section-content"},Lo={class:"dialog-section"},Uo={class:"section-header"},$o={class:"section-title"},So={class:"section-content"},To={class:"setting-item"},_o={class:"setting-label"},xo={key:0,class:"setting-item"},Ao={class:"setting-label"},Mo={class:"dialog-action"},Ro=["innerHTML"],Do={class:"dialog-footer"};function Eo(e,t,o,n,r,d){const c=uo.A,u=(0,s.g2)("font-awesome-icon"),p=l.S2,h=pt.c6,m=pt.Iy,f=pt.dW,g=co,y=G.WK,b=to.A,k=a.R7,v=eo.A,C=Zt,w=J.ll,F=J.MQ,L=O.qi,U=X.kZ,$=Ve,S=Q.A,T=H;return(0,s.uX)(),(0,s.CE)("div",po,[(0,s.Lk)("div",ho,[(0,s.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,s.bF)(f,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,s.k6)(()=>[(0,s.bF)(m,null,{default:(0,s.k6)(()=>[(0,s.bF)(h,{command:"showHistory"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,s.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,s.bF)(h,{command:"toggleLanguage"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,s.bF)(h,{command:"viewDocs"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"more-button"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,s.Lk)("div",{class:(0,i.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,s.Lk)("div",{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,s.uX)(),(0,s.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,s.uX)(),(0,s.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,s.uX)(),(0,s.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,s.k6)(()=>[(0,s.bF)(p,{class:"directory-tree-trigger"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,s.Q3)("",!0)],2),(0,s.bF)(k,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,s.k6)(()=>["default"===r.uploadMethod?((0,s.uX)(),(0,s.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,s.uX)(),(0,s.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,s.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,s.bF)(f,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,s.k6)(()=>[(0,s.bF)(m,null,{default:(0,s.k6)(()=>[(0,s.bF)(h,{command:"toggleTheme"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,s.eW)(" "+(0,i.v_)(d.getThemeText()),1)]),_:1}),(0,s.bF)(h,{command:"toggleUploadMethod"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,s.eW)(" "+(0,i.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,s.bF)(h,{command:"showHistory"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,s.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,s.bF)(h,{command:"toggleLanguage"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,s.bF)(h,{command:"viewDocs"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"mobile-more-button"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,s.Lk)("div",{class:(0,i.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,s.Lk)("div",mo,[(0,s.Lk)("div",fo,[(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,s.bF)(k,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,s.bF)(p,{class:(0,i.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,s.bF)(v,{useConfigLink:!0}),(0,s.Lk)("div",go,[(0,s.Lk)("h1",yo,[(0,s.Lk)("span",bo,(0,i.v_)(d.ownerName)+" ImgHub",1),(0,s.Lk)("a",ko,(0,i.v_)(d.ownerName),1),t[24]||(t[24]=(0,s.eW)(" ImgHub ",-1))])]),(0,s.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,s.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,s.k6)(()=>[(0,s.Lk)("div",vo,[(0,s.Lk)("div",Co,[(0,s.Lk)("span",wo,(0,i.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,s.Lk)("div",Fo,[(0,s.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,s.k6)(()=>[(0,s.bF)(w,{value:"url",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"link",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,s.bF)(w,{value:"md",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,s.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,s.bF)(w,{value:"html",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,s.Lk)("span",null,"HTML",-1))]),_:1}),(0,s.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,s.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,s.Lk)("div",Lo,[(0,s.Lk)("div",Uo,[(0,s.Lk)("span",$o,(0,i.v_)(e.$t("settings.customLink")),1),(0,s.bF)(k,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",So,[(0,s.Lk)("div",To,[(0,s.Lk)("span",_o,(0,i.v_)(e.$t("settings.enableCustom")),1),(0,s.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,s.uX)(),(0,s.CE)("div",xo,[(0,s.Lk)("span",Ao,(0,i.v_)(e.$t("settings.customPrefix")),1),(0,s.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,s.Q3)("",!0)])]),(0,s.Lk)("div",Mo,[(0,s.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,s.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),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","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,s.bF)(S,{class:"footer"}),(0,s.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,s.k6)(()=>[(0,s.Lk)("span",Do,[(0,s.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,s.k6)(()=>[(0,s.Lk)("div",{innerHTML:r.announcementContent},null,8,Ro)]),_:1},8,["title","modelValue","width"]),(0,s.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var Io=o(46638),Po=o(48903),No=o(90144),zo=o(62388),Wo={name:"UploadHome",mixins:[Po.A],data(){return{selectedUrlForm:(0,No.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,zo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Rt.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:Zt,Footer:Q.A,ToggleDark:uo.A,Logo:eo.A,UploadHistory:H,UploadSettingsDialog:Ve,DirectoryTreePicker:to.A,DirectorySuggestionInput:co},methods:{async fetchAvailableChannels(){try{const e=await At.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,zo.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(){At.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,Io.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,Io.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 Vo=(0,V.A)(Wo,[["render",Eo],["__scopeId","data-v-06705292"]]);var Bo=Vo},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 i}});o(44114);var a=o(25507),l=o(16915);let s=!1;async function i(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||s||(s=!0,a.A.commit("setAdminLoggedIn",!1),l.A.push("/adminLogin").finally(()=>{s=!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 s={key:0,class:"page-footer"},i=["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",s,[(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,i)])]))}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"},s={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={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",s,[...t[1]||(t[1]=[(0,a.Fv)('',9)])])):"webdav"===o.type?((0,a.uX)(),(0,a.CE)("svg",i,[...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=318.0e6c0e43.js.map \ No newline at end of file diff --git a/frontend-dist/js/318.0e6c0e43.js.gz b/frontend-dist/js/318.0e6c0e43.js.gz deleted file mode 100644 index 399237b15c0574b4a631e159388e4da5ada8c454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32906 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 F0RW6<3#R}8 diff --git a/frontend-dist/js/318.0e6c0e43.js.map b/frontend-dist/js/318.0e6c0e43.js.map deleted file mode 100644 index 12c1393c..00000000 --- a/frontend-dist/js/318.0e6c0e43.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/318.0e6c0e43.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/ToggleDark.vue?4a88","webpack://sanyue_imghub/./src/components/ToggleDark.vue","webpack://sanyue_imghub/./src/components/ToggleDark.vue?0bce","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/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?de1f","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?38e3","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?fcf5","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 { 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=2122c62a&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=2122c62a&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-2122c62a\"]])\n\nexport default __exports__","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 { 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, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, 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\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\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: \"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: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\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[12] || (_cache[12] = $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(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_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[1] || (_cache[1] = $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_9, [_createElementVNode(\"span\", _hoisted_10, _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_11, [_createElementVNode(\"span\", _hoisted_12, [_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[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $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_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _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_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_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[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_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_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $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_28, [_createVNode(_component_el_input_number, {\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 step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_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_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $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_32, [_createVNode(_component_el_input_number, {\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 precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _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_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $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';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\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 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 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 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=1c6b8366\"\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.css?vue&type=style&index=1&lang=css&external\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\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 class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_6 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_7 = [\"aria-label\"];\nconst _hoisted_8 = [\"aria-pressed\"];\nconst _hoisted_9 = [\"aria-pressed\"];\nconst _hoisted_10 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_12 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_13 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_14 = {\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(\"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_2, 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\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3), _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_4)]),\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_5, [_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_6, [_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_8), _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_9)], 10, _hoisted_7)])]),\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_10, [_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_11, [_createElementVNode(\"div\", _hoisted_12, [_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_13, [_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_14, [_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() // 存储每个文件的 AbortController\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 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 this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\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 async handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\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 if (fileItems.length > 0) {\n event.preventDefault();\n const entries = await collectFilesFromDataTransferItems(fileItems);\n if (entries.length) await this.uploadLocalEntries(entries);\n } else if (clipboardData.files?.length) {\n event.preventDefault();\n await this.uploadLocalEntries(filesToUploadEntries(clipboardData.files));\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=81dfc90a&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=81dfc90a&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-81dfc90a\"]])\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 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\", \"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=06705292&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=06705292&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-06705292\"]])\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","id","_hoisted_3","_hoisted_4","_component_font_awesome_icon","onClick","args","handleToggleClick","mode","isAuto","key","icon","style","isDark","viewBox","fill","stroke","x","cx","cy","mask","opacity","x1","y1","x2","y2","_","data","$store","getters","useDarkMode","cusDarkMode","methods","commit","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","trigger","transition","reference","$slots","undefined","error","fetchDirectoryTree","$t","ref","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","loading","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","response","fetchWithAuth","method","ok","status","json","axios","withAuthCode","tree","err","console","startsWith","$emit","_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","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","dialogWidth","uploadChannel","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","Array","emits","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","_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","disabled","disableTooltip","openFolderPicker","webkitdirectory","directory","onChange","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","handler","scrollContainer","setScrollTop","deep","immediate","location","protocol","host","handlePaste","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","tagName","clipboardData","stringItems","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","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","isArray","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","availableChannels","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/318.0e6c0e43.js.map.gz b/frontend-dist/js/318.0e6c0e43.js.map.gz deleted file mode 100644 index d6322ddf0a66aeea729c6dbcb62d11d0c2437680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82487 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

x+3-*RUL@x0?~66ytOa>;o<35>AF^L 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 diff --git a/frontend-dist/js/927.1adefc82.js b/frontend-dist/js/927.1adefc82.js new file mode 100644 index 00000000..8c83525d --- /dev/null +++ b/frontend-dist/js/927.1adefc82.js @@ -0,0 +1,2 @@ +(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[927],{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 s=["href","target"],i=["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,i)],10,s)}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},1927:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Bo}});var a=o(78507),l=(o(85331),o(213),o(80047)),s=(o(99648),o(56768)),i=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"},k={class:"grid-actions"},v={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"},D={key:0,class:"load-more-container"},E={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},P={key:1,class:"no-more-hint"},N={key:1,class:"empty-state"};function z(e,t,o,z,W,V){const B=(0,s.g2)("font-awesome-icon"),H=l.S2,Q=a.R7;return(0,s.uX)(),(0,s.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,s.Lk)("div",n,[(0,s.Lk)("div",r,[(0,s.Lk)("h2",null,(0,i.v_)(e.$t("uploadHistory.title")),1),(0,s.Lk)("span",d,(0,i.v_)(e.$t("uploadHistory.totalRecords",{count:W.totalCount})),1)]),(0,s.Lk)("div",c,[(0,s.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(H,{circle:"",onClick:V.toggleViewMode},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"grid"===W.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,s.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(H,{circle:"",type:"danger",onClick:V.clearHistory},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,s.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"times"})]),_:1})])]),W.historyList.length>0?((0,s.uX)(),(0,s.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>V.handleScroll&&V.handleScroll(...e))},[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(V.groupedHistory,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.date,class:"history-group"},[(0,s.Lk)("div",u,[t[4]||(t[4]=(0,s.Lk)("div",{class:"timeline-dot"},null,-1)),(0,s.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===W.viewMode?((0,s.uX)(),(0,s.CE)("div",h,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.items,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.time,class:"grid-item"},[(0,s.Lk)("div",m,[V.isImage(e.name)?((0,s.uX)(),(0,s.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,f)):V.isVideo(e.name)?((0,s.uX)(),(0,s.CE)("video",{key:1,src:e.url,muted:""},null,8,g)):((0,s.uX)(),(0,s.CE)("div",y,[(0,s.bF)(B,{icon:"file",class:"file-icon"})])),(0,s.Lk)("div",b,[(0,s.Lk)("div",k,[(0,s.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,s.Lk)("div",v,[(0,s.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,C),(0,s.Lk)("div",w,(0,i.v_)(V.formatTime(e.time)),1)])]))),128))])):((0,s.uX)(),(0,s.CE)("div",F,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.items,e=>((0,s.uX)(),(0,s.CE)("div",{key:e.time,class:"list-item"},[(0,s.Lk)("div",L,[V.isImage(e.name)?((0,s.uX)(),(0,s.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,U)):V.isVideo(e.name)?((0,s.uX)(),(0,s.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,s.uX)(),(0,s.CE)("div",S,[(0,s.bF)(B,{icon:"file"})]))]),(0,s.Lk)("div",T,[(0,s.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,_),(0,s.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,x)]),(0,s.Lk)("div",A,[(0,s.Lk)("div",M,(0,i.v_)(V.formatTime(e.time)),1)]),(0,s.Lk)("div",R,[(0,s.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,s.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,s.k6)(()=>[(0,s.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),V.hasMore?((0,s.uX)(),(0,s.CE)("div",D,[W.loadingMore?((0,s.uX)(),(0,s.CE)("div",E,[(0,s.bF)(B,{icon:"spinner",spin:""}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadHistory.loading")),1)])):((0,s.uX)(),(0,s.CE)("div",I,(0,i.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):W.historyList.length>0?((0,s.uX)(),(0,s.CE)("div",P,(0,i.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,s.Q3)("",!0)],544)):((0,s.uX)(),(0,s.CE)("div",N,[(0,s.bF)(B,{icon:"history",class:"empty-icon"}),(0,s.Lk)("p",null,(0,i.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var W={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"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${a}-${l} ${s}:${i}:${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)}}},V=o(71241);const B=(0,V.A)(W,[["render",z],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),q=(o(15616),o(81418)),j=(o(50333),o(74757)),O=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(97769));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},ae={class:"setting-item"},le={class:"setting-label"},se={key:0,class:"setting-item"},ie={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},fe={class:"dialog-section"},ge={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ke={class:"setting-item"},ve={class:"setting-label"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Se={key:1,class:"setting-item slider-item"},Te={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Ae={key:0,class:"dialog-section"},Me={class:"section-header"},Re={class:"section-title"},De={class:"section-content"},Ee={class:"setting-item"},Ie={class:"setting-label"},Pe={class:"dialog-action"};function Ne(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,s.g2)("font-awesome-icon"),m=a.R7,f=K.P9,g=K.AV,y=G.WK,b=O.qi,k=j.B8,v=q.lq,C=l.S2,w=X.kZ;return(0,s.uX)(),(0,s.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",Z,[(0,s.Lk)("div",ee,[(0,s.Lk)("span",te,(0,i.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,s.Lk)("div",oe,[(0,s.Lk)("div",ae,[(0,s.Lk)("span",le,(0,i.v_)(e.$t("uploadSettings.channelType")),1),(0,s.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"telegram",class:"channel-icon"}),t[13]||(t[13]=(0,s.Lk)("span",null,"TG",-1))]),_:1}),(0,s.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"cfr2",class:"channel-icon"}),t[14]||(t[14]=(0,s.Lk)("span",null,"R2",-1))]),_:1}),(0,s.bF)(u,{label:"s3",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"s3",class:"channel-icon"}),t[15]||(t[15]=(0,s.Lk)("span",null,"S3",-1))]),_:1}),(0,s.bF)(u,{label:"discord",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"discord",class:"channel-icon"}),t[16]||(t[16]=(0,s.Lk)("span",null,"DC",-1))]),_:1}),(0,s.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"huggingface",class:"channel-icon"}),t[17]||(t[17]=(0,s.Lk)("span",null,"HF",-1))]),_:1}),(0,s.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{type:"webdav",class:"channel-icon"}),t[18]||(t[18]=(0,s.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,s.uX)(),(0,s.CE)("div",se,[(0,s.Lk)("span",ie,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(g,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(o.currentChannelList,e=>((0,s.uX)(),(0,s.Wv)(f,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,s.Q3)("",!0),(0,s.Lk)("div",ne,[(0,s.Lk)("span",re,(0,i.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,s.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,s.Lk)("div",de,[(0,s.Lk)("span",ce,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,s.Lk)("div",ue,[(0,s.Lk)("div",pe,[(0,s.Lk)("span",he,(0,i.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,s.Lk)("div",me,[(0,s.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{label:"default",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"cog",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,s.bF)(u,{label:"index",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,s.bF)(u,{label:"origin",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,s.bF)(u,{label:"short",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,s.Lk)("div",fe,[(0,s.Lk)("div",ge,[(0,s.Lk)("span",ye,(0,i.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,s.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",be,[(0,s.Lk)("div",ke,[(0,s.Lk)("span",ve,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,s.Lk)("div",Ce,[(0,s.Lk)("span",we,(0,i.v_)(e.$t("uploadSettings.fileCompress")),1),(0,s.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,s.uX)(),(0,s.CE)("div",Fe,[(0,s.Lk)("span",Le,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",Ue,[(0,s.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,s.Lk)("div",$e,[(0,s.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=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[19]||(t[19]=(0,s.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,s.Q3)("",!0),o.customerCompress?((0,s.uX)(),(0,s.CE)("div",Se,[(0,s.Lk)("span",Te,[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,s.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",_e,[(0,s.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=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,s.Lk)("div",xe,[(0,s.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=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[20]||(t[20]=(0,s.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,s.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,s.uX)(),(0,s.CE)("div",Ae,[(0,s.Lk)("div",Me,[(0,s.Lk)("span",Re,(0,i.v_)(e.$t("uploadSettings.serverCompress")),1),(0,s.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",De,[(0,s.Lk)("div",Ee,[(0,s.Lk)("span",Ie,(0,i.v_)(e.$t("uploadSettings.enableCompress")),1),(0,s.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,s.Q3)("",!0),(0,s.Lk)("div",Pe,[(0,s.bF)(C,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var ze={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{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:""},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"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const We=(0,V.A)(ze,[["render",Ne]]);var Ve=We,Be=o(88559),He=(o(85970),o(813)),Qe=(o(34896),o(69655)),Xe=(o(2893),o(74253));o(79899);const qe={class:"upload-list-item"},je=["href"],Oe={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},at={key:1,class:"upload-list-item-progress"},lt={class:"upload-list-item-action"};function st(e,t,o,a,l,n){const r=(0,s.g2)("font-awesome-icon"),d=Xe.$g,c=G.WK,u=Qe.ve,p=(0,s.g2)("Link"),h=He.tk,m=(0,s.g2)("Delete");return(0,s.uX)(),(0,s.CE)("div",qe,[(0,s.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,s.uX)(),(0,s.CE)("video",Oe,[(0,s.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,s.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,s.uX)(),(0,s.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,Ke)):((0,s.uX)(),(0,s.CE)("div",Je,[(0,s.bF)(r,{icon:"file",class:"file-icon"})]))],8,je),(0,s.Lk)("div",Ye,[(0,s.Lk)("div",Ze,[(0,s.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,s.uX)(),(0,s.CE)("div",et,[(0,s.Lk)("div",tt,[(0,s.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,s.k6)(()=>[...t[8]||(t[8]=[(0,s.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,s.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,s.k6)(()=>[...t[9]||(t[9]=[(0,s.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,s.Lk)("div",ot,[(0,s.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,s.k6)(()=>[...t[10]||(t[10]=[(0,s.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,s.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,s.k6)(()=>[...t[11]||(t[11]=[(0,s.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,s.uX)(),(0,s.CE)("div",at,[(0,s.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,s.Lk)("div",lt,[(0,s.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,s.bF)(h,null,{default:(0,s.k6)(()=>[(0,s.bF)(p)]),_:1})]),(0,s.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,s.bF)(h,null,{default:(0,s.k6)(()=>[(0,s.bF)(m)]),_:1})])])])}var it=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:it.Link,Delete:it.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 nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.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 s=l.length+4,i=t-s-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+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 ct=(0,V.A)(dt,[["render",st],["__scopeId","data-v-645a7810"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(47358)),ft=o(45130);const gt={class:"upload-form"},yt={class:"upload-card-glow",ref:"uploadCardGlow"},bt=["innerHTML"],kt=["aria-label"],vt={key:0,class:"upload-card"},Ct={class:"paste-card-actions"},wt=["aria-label"],Ft=["aria-pressed"],Lt=["aria-pressed"],Ut={class:"upload-list-container"},$t={class:"upload-list-dashboard-action"},St={class:"modern-action-group"},Tt={class:"modern-dropdown-item-content"},_t={class:"modern-action-btn modern-action-btn-danger"};function xt(e,t,n,r,d,c){const u=He.tk,p=(0,s.g2)("font-awesome-icon"),h=a.R7,m=mt.j5,f=G.WK,g=l.S2,y=ht.Ik,b=(0,s.g2)("List"),k=(0,s.g2)("Checked"),v=(0,s.g2)("Failed"),C=Xe.$g,w=O.qi,F=pt.c6,L=pt.Iy,U=pt.dW,$=ut,S=Be.kA;return(0,s.uX)(),(0,s.CE)("div",gt,[(0,s.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,ft.D$)((...e)=>c.handleDrop&&c.handleDrop(...e),["stop","prevent"]))},[(0,s.Lk)("div",yt,null,512),"default"===n.uploadMethod?((0,s.uX)(),(0,s.Wv)(m,{key:0,class:(0,i.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,s.k6)(()=>[(0,s.bF)(u,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[...t[12]||(t[12]=[(0,s.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,s.Lk)("path",{d:"M12 7v10"}),(0,s.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,s.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,bt),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.selectFolderUpload"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.Lk)("button",{type:"button",class:(0,i.C4)(["folder-upload-icon-button",{"upload-list-busy":d.fileList.length}]),"aria-label":e.$t("upload.selectFolderUpload"),onClick:t[0]||(t[0]=(0,ft.D$)((...e)=>c.openFolderPicker&&c.openFolderPicker(...e),["stop","prevent"]))},[(0,s.bF)(p,{icon:"folder-open"})],10,kt)]),_:1},8,["disabled","content"])]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,s.Q3)("",!0),(0,s.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,s.uX)(),(0,s.CE)("div",vt,[(0,s.bF)(y,{class:(0,i.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[(0,s.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,s.Lk)("div",Ct,[(0,s.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,s.Lk)("div",{class:(0,i.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,s.Lk)("button",{class:(0,i.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,i.v_)(e.$t("upload.pasteSave")),11,Ft),(0,s.Lk)("button",{class:(0,i.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,i.v_)(e.$t("upload.pasteExternal")),11,Lt)],10,wt)])]),_:1},8,["class"])])):(0,s.Q3)("",!0),(0,s.bF)(y,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,s.k6)(()=>[(0,s.Lk)("div",Ut,[(0,s.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,s.bF)(C,{class:"upload-list-dashboard-title"},{default:(0,s.k6)(()=>[(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(b)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(k)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadSuccessCount)+" ",1),(0,s.bF)(u,null,{default:(0,s.k6)(()=>[(0,s.bF)(v)]),_:1}),(0,s.eW)((0,i.v_)(c.uploadErrorCount),1)]),_:1}),(0,s.Lk)("div",$t,[(0,s.Lk)("div",St,[(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[8]||(t[8]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,s.bF)(p,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(U,null,{dropdown:(0,s.k6)(()=>[(0,s.bF)(L,{class:"modern-dropdown-menu"},{default:(0,s.k6)(()=>[(0,s.bF)(F,null,{default:(0,s.k6)(()=>[(0,s.Lk)("div",Tt,[(0,s.Lk)("span",null,(0,i.v_)(e.$t("uploadForm.autoRetry")),1),(0,s.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,s.k6)(()=>[(0,s.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[9]||(t[9]=(...e)=>c.retryError&&c.retryError(...e))},[(0,s.bF)(p,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(h,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(U,null,{dropdown:(0,s.k6)(()=>[(0,s.bF)(L,{class:"modern-dropdown-menu"},{default:(0,s.k6)(()=>[(0,s.bF)(F,{onClick:c.clearFileList},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,s.bF)(F,{onClick:c.clearSuccessList},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,s.k6)(()=>[(0,s.Lk)("button",_t,[(0,s.bF)(p,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(d.fileList.slice().reverse(),e=>((0,s.uX)(),(0,s.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 At=o(457),Mt=o(76334),Rt=o(60782);function Dt(e,t,o){const a=o+e;return{finalURL:a,mdURL:`![${t}](${a})`,htmlURL:`${t}`,ubbURL:`[img]${a}[/img]`}}function Et(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function It(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=Dt(e.srcID,e.name,t);Object.assign(e,o)})}const Pt=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]),Nt=(e,t)=>e>>>t|e<<32-t;function zt(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=Nt(o[u-15],7)^Nt(o[u-15],18)^o[u-15]>>>3,t=Nt(o[u-2],17)^Nt(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[a,l,s,i,n,r,d,c]=t;for(let u=0;u<64;u++){const e=Nt(n,6)^Nt(n,11)^Nt(n,25),t=n&r^~n&d,p=c+e+t+Pt[u]+o[u]>>>0,h=Nt(a,2)^Nt(a,13)^Nt(a,22),m=a&l^a&s^l&s,f=h+m>>>0;c=d,d=r,r=n,n=i+p>>>0,i=s,s=l,l=a,a=p+f>>>0}t[0]=t[0]+a>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+s>>>0,t[3]=t[3]+i>>>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 Wt(){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 s=0;if(o>0){const a=64-o,i=Math.min(a,l.length);t.set(l.subarray(0,i),o),o+=i,s=i,64===o&&(zt(t,e),o=0)}while(s+64<=l.length)zt(l.subarray(s,s+64),e),s+=64;s56&&(t.fill(0,o,64),zt(t,e),o=0),t.fill(0,o,56);const s=new DataView(t.buffer);s.setUint32(56,Math.floor(l/4294967296),!1),s.setUint32(60,l>>>0,!1),zt(t,e);let i="";for(let t=0;t<8;t++)i+=e[t].toString(16).padStart(8,"0");return i}}}async function Vt(e){const t=Wt(),o=4194304;let a=0;while(ae&&"."!==e).map(e=>".."===e?"_":e).join("/")}function Ht(e=""){const t=Bt(e),o=t.lastIndexOf("/");return-1===o?"":t.slice(0,o)}function Qt(e="",t=""){const o=/^[\\/]/.test(String(e).trim()),a=[Bt(e),Bt(t)].filter(Boolean).join("/");return a?o?`/${a}`:a:""}function Xt(e=[]){return Array.from(e).map(e=>({file:e,relativePath:Bt(e.webkitRelativePath||e.relativePath||e.name)}))}function qt(e){return new Promise((t,o)=>e.file(t,o))}async function jt(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 Ot(e,t,o){const a=Bt([t,e.name].filter(Boolean).join("/"));if(e.isFile){const t=await qt(e);return void o.push({file:t,relativePath:a})}if(e.isDirectory){const t=await jt(e);for(const e of t)await Ot(e,a,o)}}async function Gt(e,t,o){const a=Bt([t,e.name].filter(Boolean).join("/"));if("file"!==e.kind){if("directory"===e.kind)for await(const l of e.values())await Gt(l,a,o)}else o.push({file:await e.getFile(),relativePath:a})}async function Kt(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(){It(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&It(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Rt.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},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),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),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=Qt(this.uploadFolder,Ht(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=Xt(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 Kt(t.items):Xt(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 s=l.length+4,i=t-s-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+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,s="external"===a?"default":this.uploadNameType,i=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 Vt(e.file);r.append("sha256",t),console.log("SHA256 computed:",t)}catch(d){console.error("Failed to compute SHA256:",d)}(0,At.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+a+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+s+"&autoRetry="+l+"&uploadFolder="+encodeURIComponent(i),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,s=e.file.size,i=e.file.type||"application/octet-stream",n=Math.ceil(s/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 Vt(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",i),t.append("totalChunks",n.toString());const m=await(0,At.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 k=0,v=!1,C="",w=!1;const F=async t=>{if(v||w)return;const p=t*l,m=Math.min(p+l,s),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",i);let k=0;const F=3;while(k{if(v||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(k++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${k}/${F}):`,h),k>=F)throw v=!0,C=`分块 ${t+1}/${n} 上传失败: ${h.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*k))}}},L=[];for(let e=0;e{while(kt.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,At.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=Dt(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(Et(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 s=a.type.includes("image")&&this.customerCompress&&a.size/1024/1024>this.compressBar,i=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(s)Mt.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 s=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;n(l,s)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:a.name})),o(e)});else if(i){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=>Et(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")})},async handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData;if(!t)return;const o=Array.from(t.items||[]),a=o.filter(e=>"file"===e.kind),l=o.filter(e=>"string"===e.kind);if(a.length>0){e.preventDefault();const t=await Kt(a);t.length&&await this.uploadLocalEntries(t)}else t.files?.length&&(e.preventDefault(),await this.uploadLocalEntries(Xt(t.files)));l.length>0&&this.uploadFromUrl(l)},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`,i=`[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:s,ubbURL:i,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)&&At.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 s=o.headers["content-disposition"];if(s){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(s);if(null!=o&&o[1]){a=o[1].replace(/['"]/g,"");try{a=decodeURIComponent(a)}catch(l){a=""}}""===a&&(o=t.exec(s),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 i=o.data,n=new File([i],a,{type:i.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 Vt(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()),s=btoa(String.fromCharCode(...l));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const i=await(0,At.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:s,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:a},withAuthCode:!0,signal:o.signal});if(!i.data.success)throw new Error(i.data.error||"Failed to get upload URL");const n=i.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,At.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:s}=a,i=parseInt(s.chunk_size),n=Object.keys(s).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);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*i,l=Math.min(a+i,e.file.size),n=e.file.slice(a,l);console.log(`Uploading part ${u}/${d}`);const c=await fetch(s[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"),s=l.getContext("2d");a.onload=()=>{l.width=a.width,l.height=a.height,s.drawImage(a,0,0),l.toBlob(l=>{if(l){const o=e.name,a=o.lastIndexOf("."),s=a>0?o.substring(0,a)+".webp":o+".webp",i=new File([l],s,{type:"image/webp"});i.uid=e.uid,this.copyUploadPath(e,i),t(i)}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 Yt=(0,V.A)(Jt,[["render",xt],["__scopeId","data-v-5e12bf57"]]);var Zt=Yt,eo=o(732),to=o(33892);const oo={class:"directory-suggestion-input",ref:"wrapperRef"},ao={class:"suggestion-dropdown"},lo={class:"suggestion-list"},so=["title","onMousedown"];function io(e,t,o,a,l,n){const r=G.WK;return(0,s.uX)(),(0,s.CE)("div",oo,[(0,s.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,s.bo)((0,s.Lk)("div",ao,[(0,s.Lk)("ul",lo,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(l.suggestions,(e,t)=>((0,s.uX)(),(0,s.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,ft.D$)(t=>n.selectItem(e),["prevent"])},(0,i.v_)(e.value),41,so))),128))])],512),[[ft.aG,l.dropdownVisible&&l.suggestions.length>0]])],512)}var no={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 At.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]||"",s=a.slice(0,-1).filter(Boolean),i=s.length>0?`/${s.join("/")}/`:"/";return{segmentInput:l,parentPath:i}},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 ro=(0,V.A)(no,[["render",io],["__scopeId","data-v-28b8eda7"]]);var co=ro,uo=o(17879);const po={class:"container"},ho={class:"upload-home"},mo={class:"quick-toolbar-actions"},fo={class:"quick-toolbar-actions-inner"},go={class:"header"},yo={class:"title"},bo={class:"title-crayon-text","aria-hidden":"true"},ko={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},vo={class:"dialog-section"},Co={class:"section-header"},wo={class:"section-title"},Fo={class:"section-content"},Lo={class:"dialog-section"},Uo={class:"section-header"},$o={class:"section-title"},So={class:"section-content"},To={class:"setting-item"},_o={class:"setting-label"},xo={key:0,class:"setting-item"},Ao={class:"setting-label"},Mo={class:"dialog-action"},Ro=["innerHTML"],Do={class:"dialog-footer"};function Eo(e,t,o,n,r,d){const c=uo.A,u=(0,s.g2)("font-awesome-icon"),p=l.S2,h=pt.c6,m=pt.Iy,f=pt.dW,g=co,y=G.WK,b=to.A,k=a.R7,v=eo.A,C=Zt,w=J.ll,F=J.MQ,L=O.qi,U=X.kZ,$=Ve,S=Q.A,T=H;return(0,s.uX)(),(0,s.CE)("div",po,[(0,s.Lk)("div",ho,[(0,s.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,s.bF)(f,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,s.k6)(()=>[(0,s.bF)(m,null,{default:(0,s.k6)(()=>[(0,s.bF)(h,{command:"showHistory"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,s.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,s.bF)(h,{command:"toggleLanguage"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,s.bF)(h,{command:"viewDocs"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"more-button"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,s.Lk)("div",{class:(0,i.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,s.Lk)("div",{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,s.uX)(),(0,s.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,s.uX)(),(0,s.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,s.uX)(),(0,s.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,s.k6)(()=>[(0,s.bF)(p,{class:"directory-tree-trigger"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,s.Q3)("",!0)],2),(0,s.bF)(k,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,s.k6)(()=>["default"===r.uploadMethod?((0,s.uX)(),(0,s.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,s.uX)(),(0,s.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,s.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,s.bF)(f,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,s.k6)(()=>[(0,s.bF)(m,null,{default:(0,s.k6)(()=>[(0,s.bF)(h,{command:"toggleTheme"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,s.eW)(" "+(0,i.v_)(d.getThemeText()),1)]),_:1}),(0,s.bF)(h,{command:"toggleUploadMethod"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,s.eW)(" "+(0,i.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,s.bF)(h,{command:"showHistory"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,s.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,s.bF)(h,{command:"toggleLanguage"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,s.bF)(h,{command:"viewDocs"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,s.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"mobile-more-button"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,s.Lk)("div",{class:(0,i.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,s.Lk)("div",mo,[(0,s.Lk)("div",fo,[(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,s.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,s.bF)(k,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,s.k6)(()=>[(0,s.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,s.bF)(p,{class:(0,i.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,s.bF)(v,{useConfigLink:!0}),(0,s.Lk)("div",go,[(0,s.Lk)("h1",yo,[(0,s.Lk)("span",bo,(0,i.v_)(d.ownerName)+" ImgHub",1),(0,s.Lk)("a",ko,(0,i.v_)(d.ownerName),1),t[24]||(t[24]=(0,s.eW)(" ImgHub ",-1))])]),(0,s.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,s.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,s.k6)(()=>[(0,s.Lk)("div",vo,[(0,s.Lk)("div",Co,[(0,s.Lk)("span",wo,(0,i.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,s.Lk)("div",Fo,[(0,s.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,s.k6)(()=>[(0,s.bF)(w,{value:"url",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"link",class:"radio-icon"}),(0,s.Lk)("span",null,(0,i.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,s.bF)(w,{value:"md",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,s.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,s.bF)(w,{value:"html",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,s.Lk)("span",null,"HTML",-1))]),_:1}),(0,s.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,s.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,s.Lk)("div",Lo,[(0,s.Lk)("div",Uo,[(0,s.Lk)("span",$o,(0,i.v_)(e.$t("settings.customLink")),1),(0,s.bF)(k,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,s.Lk)("div",So,[(0,s.Lk)("div",To,[(0,s.Lk)("span",_o,(0,i.v_)(e.$t("settings.enableCustom")),1),(0,s.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,s.uX)(),(0,s.CE)("div",xo,[(0,s.Lk)("span",Ao,(0,i.v_)(e.$t("settings.customPrefix")),1),(0,s.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,s.Q3)("",!0)])]),(0,s.Lk)("div",Mo,[(0,s.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,s.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),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","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,s.bF)(S,{class:"footer"}),(0,s.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,s.k6)(()=>[(0,s.Lk)("span",Do,[(0,s.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,s.k6)(()=>[(0,s.eW)((0,i.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,s.k6)(()=>[(0,s.Lk)("div",{innerHTML:r.announcementContent},null,8,Ro)]),_:1},8,["title","modelValue","width"]),(0,s.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var Io=o(46638),Po=o(48903),No=o(90144),zo=o(62388),Wo={name:"UploadHome",mixins:[Po.A],data(){return{selectedUrlForm:(0,No.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,zo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Rt.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:Zt,Footer:Q.A,ToggleDark:uo.A,Logo:eo.A,UploadHistory:H,UploadSettingsDialog:Ve,DirectoryTreePicker:to.A,DirectorySuggestionInput:co},methods:{async fetchAvailableChannels(){try{const e=await At.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,zo.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(){At.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,Io.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,Io.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 Vo=(0,V.A)(Wo,[["render",Eo],["__scopeId","data-v-06705292"]]);var Bo=Vo},2893: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 i}),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 k}),o.d(t,"EImageType",function(){return a}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(a||(a={}));var s=function(e,t,o,a){return new(o||(o=Promise))(function(l,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,n)}r((a=a.apply(e,t||[])).next())})};function i(e,t=.92,o=a.JPEG){return s(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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s=atob(o[1]);let i=s.length;const n=new Uint8Array(i);for(;i--;)n[i]=s.charCodeAt(i);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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s,i;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;i=e.width*t,s=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,s=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(a.height=i,a.width=s):(a.height=s,a.width=i),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,s){function i(e){try{r(a.next(e))}catch(e){s(e)}}function n(e){try{r(a.throw(e))}catch(e){s(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(i,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 s=o.split(",")[0].match(/:(.*?);/)[1],n=a.JPEG;l(t.type)&&(n=t.type,s=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),f=yield d(h,s);return f.size>e.size?e:f})}function k(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,s=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 k=[null,null];for(let e=1;e<=7;e++){y=yield i(g,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...k].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-s)-Math.abs(.75*t.length-s))[0]);break}if(ot))break;k[0]=y,b+=Math.pow(.5,e+1)}}const v=yield d(y,u);return v.size>e.size?e:v})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},17879:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var a=o(56768),l=o(45130),s=o(24232);const i={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,s.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",i,[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-2122c62a"]]);var m=h},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)),s=(o(37952),o(30650)),i=(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"},k={class:"node-label"};function v(e,t,o,v,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=i.qk,$=s.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",k,(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",v],["__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)},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 i}});o(44114);var a=o(25507),l=o(16915);let s=!1;async function i(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||s||(s=!0,a.A.commit("setAdminLoggedIn",!1),l.A.push("/adminLogin").finally(()=>{s=!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 s={key:0,class:"page-footer"},i=["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",s,[(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,i)])]))}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"},s={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={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",s,[...t[1]||(t[1]=[(0,a.Fv)('',9)])])):"webdav"===o.type?((0,a.uX)(),(0,a.CE)("svg",i,[...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=927.1adefc82.js.map \ No newline at end of file diff --git a/frontend-dist/js/927.1adefc82.js.gz b/frontend-dist/js/927.1adefc82.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..65e9ba98c8e208ea340268b0835c7b50ad674774 GIT binary patch literal 32692 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

jHJbMA>LL>_ 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/927.1adefc82.js.map b/frontend-dist/js/927.1adefc82.js.map new file mode 100644 index 00000000..33415dbd --- /dev/null +++ b/frontend-dist/js/927.1adefc82.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/927.1adefc82.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/./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?de1f","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?05f3","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?fcf5","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00","webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/components/ToggleDark.vue?4a88","webpack://sanyue_imghub/./src/components/ToggleDark.vue","webpack://sanyue_imghub/./src/components/ToggleDark.vue?0bce","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/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__","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, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, 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\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\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: \"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: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\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[12] || (_cache[12] = $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(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_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[1] || (_cache[1] = $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_9, [_createElementVNode(\"span\", _hoisted_10, _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_11, [_createElementVNode(\"span\", _hoisted_12, [_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[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $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_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _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_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_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[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_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_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $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_28, [_createVNode(_component_el_input_number, {\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 step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_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_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $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_32, [_createVNode(_component_el_input_number, {\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 precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _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_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $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';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\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 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 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 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=1c6b8366\"\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.css?vue&type=style&index=1&lang=css&external\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\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 class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_6 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_7 = [\"aria-label\"];\nconst _hoisted_8 = [\"aria-pressed\"];\nconst _hoisted_9 = [\"aria-pressed\"];\nconst _hoisted_10 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_12 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_13 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_14 = {\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(\"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_2, 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\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3), _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_4)]),\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_5, [_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_6, [_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_8), _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_9)], 10, _hoisted_7)])]),\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_10, [_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_11, [_createElementVNode(\"div\", _hoisted_12, [_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_13, [_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_14, [_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() // 存储每个文件的 AbortController\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 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 this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\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 async handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\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 if (fileItems.length > 0) {\n event.preventDefault();\n const entries = await collectFilesFromDataTransferItems(fileItems);\n if (entries.length) await this.uploadLocalEntries(entries);\n } else if (clipboardData.files?.length) {\n event.preventDefault();\n await this.uploadLocalEntries(filesToUploadEntries(clipboardData.files));\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=5e12bf57&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=5e12bf57&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-5e12bf57\"]])\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 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\", \"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=06705292&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=06705292&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-06705292\"]])\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 { 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=2122c62a&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=2122c62a&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-2122c62a\"]])\n\nexport default __exports__","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__","/**\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__","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","key","_hoisted_8","_hoisted_9","_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_font_awesome_icon","_component_el_button","_component_el_tooltip","show","$t","count","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","length","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","groups","forEach","Date","dateStr","getFullYear","getMonth","padStart","getDate","push","Object","keys","sort","a","b","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","e","console","error","setTimeout","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","then","removeItem","$message","success","catch","filter","i","stringify","fileName","imageExtensions","extension","split","pop","toLowerCase","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","window","open","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","modelValue","visible","width","dialogWidth","uploadChannel","label","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","startsWith","Array","Number","emits","get","set","innerWidth","style","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","status","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","_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","viewBox","fill","stroke","d","innerHTML","disabled","disableTooltip","openFolderPicker","webkitdirectory","directory","onChange","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","f","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","assign","K","Uint32Array","rotr","x","n","processBlock","block","H","W","s0","s1","c","g","h","S1","temp1","S0","maj","temp2","createSha256","buffer","Uint8Array","bufferLength","totalLength","update","offset","needed","toCopy","Math","subarray","digest","bitLength","view","DataView","setUint32","floor","hex","toString","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","normalizePath","path","replace","segment","join","getRelativeDirectory","relativePath","normalizedPath","lastSlashIndex","joinUploadFolder","baseFolder","relativeDirectory","hasLeadingSlash","test","trim","joinedPath","filesToUploadEntries","files","from","webkitRelativePath","readFileEntry","entry","Promise","resolve","reject","readAllDirectoryEntries","directoryEntry","reader","createReader","entries","batch","readEntries","collectFromEntry","parentPath","result","isFile","isDirectory","children","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","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","immediate","$store","commit","location","protocol","host","document","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","createLocalUid","now","applyUploadPath","normalizedRelativePath","uploadRelativePath","copyUploadPath","sourceFile","targetFile","getFileUploadFolder","fileItem","find","createUploadRequest","onProgress","evt","response","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","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","percent","res","code","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","Error","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","URL","createObjectURL","newFile","controller","clear","tagName","clipboardData","stringItems","preventDefault","uploadFromUrl","validUrls","getAsString","callback","mdUrl","htmlUrl","ubbUrl","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","blob","checkResult","retryFailedFiles","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","fetch","body","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","undefined","etag","partNumber","progress","completeResponse","oid","img","Image","canvas","createElement","ctx","getContext","onload","height","drawImage","toBlob","originalName","newName","webpFile","revokeObjectURL","onerror","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","y","clientY","top","opacity","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","normalizeDirectoryPath","inputRef","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","node","isArray","tree","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","trigger","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","source","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","acknowledgeAnnouncement","announcementContent","showHistory","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","isQuickToolbarPinned","displayedAnnouncementRefreshAt","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","some","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","cusDarkMode","getters","useDarkMode","showAnnouncementIfNeeded","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","handleManage","$router","defaultValue","num","parseFloat","isNaN","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","next","openAnnouncement","info","getAnnouncementRefreshAt","refreshAt","announcementRefreshAt","isFinite","acknowledgedRefreshAt","t","module","exports","r","o","l","call","m","defineProperty","enumerable","Symbol","toStringTag","__esModule","create","bind","prototype","hasOwnProperty","p","s","w","PNG","JPEG","GIF","u","throw","done","apply","toDataURL","match","atob","charCodeAt","Blob","download","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","readAsDataURL","scale","orientation","rotate","PI","translate","quality","accuracy","abs","pow","v","id","handleToggleClick","mode","isAuto","isDark","cx","cy","mask","x1","y1","x2","y2","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","popoverVisible","transition","reference","$slots","fetchDirectoryTree","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","expanded","openDrawer","drawerVisible","direction","windowWidth","newVal","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","handleResize","fetchWithAuth","json","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/927.1adefc82.js.map.gz b/frontend-dist/js/927.1adefc82.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..5e0439ebf34f96ae4d73e1ec5986fb2dc3d372f9 GIT binary patch literal 82764 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

vX*v+lD1xR8bv-w5 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 P5d8CBYl@A?(mw?NCsetz literal 0 HcmV?d00001 diff --git a/frontend-dist/js/app.79c9e5f6.js b/frontend-dist/js/app.79c9e5f6.js new file mode 100644 index 00000000..8d147c1e --- /dev/null +++ b/frontend-dist/js/app.79c9e5f6.js @@ -0,0 +1,2 @@ +(function(){"use strict";var e={457:function(e,a,t){var o=t(94373);const n=o.A.create({baseURL:"/",withCredentials:!0});a.A=n},16915:function(e,a,t){var o=t(48512),n=t(51219),l=t(25507),i=t(457),r=t(46638);const s=(e,a,t)=>{i.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(30),t.e(927)]).then(t.bind(t,1927)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(63)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(30),t.e(549)]).then(t.bind(t,11017)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(997)]).then(t.bind(t,60997)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(339)]).then(t.bind(t,27339)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(803)]).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(743).then(t.bind(t,92743))},{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 c},xS:function(){return d}});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":"拖拽 点击Ctrl + V 粘贴上传","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":"渠道类型","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":"搜索:#标签 -#排除标签","sortByDateDesc":"按时间倒序","sortByNameAsc":"按名称升序","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":{"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 Ctrl + V 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","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","sortByDateDesc":"Sort by date (newest)","sortByNameAsc":"Sort by name (A-Z)","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":{"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";function r(){const e=localStorage.getItem(i);return"zh-CN"===e||"en"===e?e:"zh-CN"}const s=(0,o.hU)({legacy:!0,locale:r(),fallbackLocale:"zh-CN",messages:{"zh-CN":n,en:l}});function d(e){s.global.locale=e,localStorage.setItem(i,e),document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}var c=s},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(18642),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),P=t(19223),F=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),V=t(17214),H=t(44845),j=t(55319),K=t(71669),Q=t(38557),J=t(15925),G=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),Pe=t(88502),Fe=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),Ve=t(93212),He=t(40275),je=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),Ge=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,P.Jt,F.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,V.MT,H.vH,j.v,K.bx,Q.tU,J.zp,G.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,Pe.ye,Fe.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,Ve._2,He.DX,je.l9,Ke.GR,Qe.ns,Je.Be,Ge.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(()=>{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),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:"b436b08e",63:"503c70e6",339:"7edc2fbc",380:"62235203",549:"ffe205fb",711:"936a7109",743:"f28adaf7",773:"f0780366",787:"d0dbc2dd",803:"4f2ba956",903:"1e4b549d",927:"1adefc82",997:"55a5bae5"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{30:"c12a4e5b",63:"398231b7",173:"f8fd1fa2",322:"2b40f004",339:"de55c4be",549:"0f00dee2",711:"e6dbd5da",743:"4cb567b6",773:"b55efe26",787:"f6f7607a",803:"398231b7",927:"b1a356fd",997:"c0e2a060"}[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"),c=0;cA;2c#q9Cx7U{22L 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 L-35@Pe=`99{;*wD literal 0 HcmV?d00001 diff --git a/frontend-dist/js/app.86c477e6.js.map b/frontend-dist/js/app.79c9e5f6.js.map similarity index 98% rename from frontend-dist/js/app.86c477e6.js.map rename to frontend-dist/js/app.79c9e5f6.js.map index 67d6773d..b67f0e9c 100644 --- a/frontend-dist/js/app.86c477e6.js.map +++ b/frontend-dist/js/app.79c9e5f6.js.map @@ -1 +1 @@ -{"version":3,"file":"js/app.86c477e6.js","mappings":"mEAGA,MAAMA,EAAWC,EAAAA,EAAMC,OAAO,CAC5BC,QAAiD,IACjDC,iBAAiB,IAGnB,K,iFCDA,MAAMC,EAAiBA,CAACC,EAAIC,EAAMC,KAChCP,EAAAA,EAAMQ,IAAI,yBAA0B,CAClCL,iBAAiB,IAChBM,KAAKC,IACN,MAAMC,EAAOD,EAAIC,MAAQ,CAAC,EAG1B,IAAKA,EAAKC,cAER,OADAC,EAAAA,EAAMC,OAAO,oBAAoB,GAC1BP,IAIT,GAAII,EAAKI,OAA2B,UAAlBJ,EAAKK,SAErB,OADAH,EAAAA,EAAMC,OAAO,oBAAoB,GAC1BP,IAKT,MAAMU,EAAcJ,EAAAA,EAAMK,MAAMC,cAChCN,EAAAA,EAAMC,OAAO,oBAAoB,GACjB,eAAZT,EAAGe,MACDH,GACFI,EAAAA,GAAUC,MAAMC,EAAAA,GAAKC,OAAOC,EAAE,uBAEhClB,EAAK,CAAEa,KAAM,gBAEbb,MAEDmB,MAAM,KACP,MAAMT,EAAcJ,EAAAA,EAAMK,MAAMC,cAChCN,EAAAA,EAAMC,OAAO,oBAAoB,GACjB,eAAZT,EAAGe,MACDH,GACFI,EAAAA,GAAUC,MAAMC,EAAAA,GAAKC,OAAOC,EAAE,uBAEhClB,EAAK,CAAEa,KAAM,gBAEbb,OAMAoB,EAAgBA,CAACtB,EAAIC,EAAMC,KAC/BP,EAAAA,EAAMQ,IAAI,yBAA0B,CAClCL,iBAAiB,IAChBM,KAAKC,IACN,MAAMC,EAAOD,EAAIC,MAAQ,CAAC,EAG1B,IAAKA,EAAKiB,aAER,OADAf,EAAAA,EAAMC,OAAO,mBAAmB,GACzBP,IAIT,GAAII,EAAKI,MAEP,OADAF,EAAAA,EAAMC,OAAO,mBAAmB,GACzBP,IAKT,MAAMU,EAAcJ,EAAAA,EAAMK,MAAMW,aAChChB,EAAAA,EAAMC,OAAO,mBAAmB,GAChB,UAAZT,EAAGe,MACDH,GACFI,EAAAA,GAAUC,MAAMC,EAAAA,GAAKC,OAAOC,EAAE,uBAEhClB,EAAK,CAAEa,KAAM,WAEbb,MAEDmB,MAAM,KACP,MAAMT,EAAcJ,EAAAA,EAAMK,MAAMW,aAChChB,EAAAA,EAAMC,OAAO,mBAAmB,GAChB,UAAZT,EAAGe,MACDH,GACFI,EAAAA,GAAUC,MAAMC,EAAAA,GAAKC,OAAOC,EAAE,uBAEhClB,EAAK,CAAEa,KAAM,WAEbb,OAKAuB,EAAS,CACb,CACEC,KAAM,IACNX,KAAM,OACNY,UAAWA,IAAM,wEACjBC,YAAaN,GAEf,CACEI,KAAM,SACNX,KAAM,QACNY,UAAWA,IAAM,gEAEnB,CACED,KAAM,aACNX,KAAM,YACNY,UAAWA,IAAM,gFACjBC,YAAa7B,GAEf,CACE2B,KAAM,kBACNX,KAAM,iBACNY,UAAWA,IAAM,iFACjBC,YAAa7B,GAEf,CACE2B,KAAM,gBACNX,KAAM,eACNY,UAAWA,IAAM,iFACjBC,YAAa7B,GAEf,CACE2B,KAAM,cACNX,KAAM,aACNY,UAAWA,IAAM,iEAEnB,CACED,KAAM,YACNX,KAAM,WACNY,UAAWA,IAAM,uDAEnB,CACED,KAAM,eACNX,KAAM,cACNY,UAAWA,IAAM,wDAEnB,CACED,KAAM,gBACNX,KAAM,eACNY,UAAWA,IAAM,gCAEnB,CACED,KAAM,mBACNX,KAAM,WACNY,UAAWA,IAAM,yDAIfE,GAASC,EAAAA,EAAAA,IAAa,CAC1BC,SAASC,EAAAA,EAAAA,IAAiBC,KAC1BR,WAGF,K,6EC1JA,KAAeS,EAAAA,EAAAA,IAAY,CACzBrB,MAAO,CACLsB,WAAY,KACZC,eAAgB,GAEhBtB,eAAe,EACfU,cAAc,EACda,aAAc,UACdC,kBAAmB,GACnBC,eAAgB,CACdC,sBAAkBC,EAClBC,qBAAiBD,EACjBE,iBAAaF,EACbG,oBAAgBH,EAChBI,mBAAeJ,GAEjBK,mBAAoB,GACpBC,iBAAkB,KAClBC,gBAAgB,EAChBC,oBAAqB,GACrBC,aAAc,GACdC,kBAAmB,CACjBC,aAAc,QACdC,gBAAiB,IAEnBC,iBAAkB,CAChBF,aAAc,QACdC,gBAAiB,IAEnBE,cAAc,EAEdC,YAAa,KACbC,aAAa,GAEfC,QAAS,CACPvB,WAAYtB,GAASA,EAAMsB,WAC3BC,eAAgBvB,GAASA,EAAMuB,eAC/BtB,cAAeD,GAASA,EAAMC,cAC9BU,aAAcX,GAASA,EAAMW,aAC7BmC,kBAAmB9C,GAASA,EAAMwB,aAClCC,kBAAmBzB,GAASA,EAAMyB,kBAClCC,eAAgB1B,GAASA,EAAM0B,eAC/BO,mBAAoBjC,GAASA,EAAMiC,mBACnCC,iBAAkBlC,GAASA,EAAMkC,iBACjCE,oBAAqBpC,GAASA,EAAMoC,oBACpCE,kBAAmBtC,GAASA,EAAMsC,kBAClCH,eAAgBnC,GAASA,EAAMmC,eAC/BM,iBAAkBzC,GAASA,EAAMyC,iBACjCM,kBAAoB/C,GACXA,EAAMqC,cAAgBW,aAAaC,QAAQ,iBAAmB,GAEvEN,YAAa3C,GAASA,EAAM2C,YAC5BC,YAAa5C,GAASA,EAAM4C,YAC5BM,kBAAmBlD,GAASA,EAAM0C,cAEpCS,UAAW,CACTC,aAAAA,CAAcpD,EAAOsB,GACnBtB,EAAMsB,WAAaA,CACrB,EACA+B,iBAAAA,CAAkBrD,EAAOuB,GACvBvB,EAAMuB,eAAiBA,CACzB,EACA+B,gBAAAA,CAAiBtD,EAAOuD,GACtBvD,EAAMC,cAAgBsD,CACxB,EACAC,eAAAA,CAAgBxD,EAAOuD,GACrBvD,EAAMW,aAAe4C,CACvB,EACAE,eAAAA,CAAgBzD,EAAOwB,GACrBxB,EAAMwB,aAAeA,CACvB,EACAkC,oBAAAA,CAAqB1D,EAAOyB,GAC1BzB,EAAMyB,kBAAoBA,CAC5B,EACAkC,iBAAAA,CAAkB3D,GAAO,IAAE4D,EAAG,MAAEC,IAC9B7D,EAAM0B,eAAekC,GAAOC,CAC9B,EACAC,qBAAAA,CAAsB9D,EAAO+D,GAC3B/D,EAAMiC,mBAAqB8B,CAC7B,EACAC,mBAAAA,CAAoBhE,EAAOiE,GACzBjE,EAAMkC,iBAAmB+B,CAC3B,EACAC,sBAAAA,CAAuBlE,EAAOoC,GAC5BpC,EAAMoC,oBAAsBA,CAC9B,EACA+B,oBAAAA,CAAqBnE,GAAO,IAAE4D,EAAG,MAAEC,IACjC7D,EAAMsC,kBAAkBsB,GAAOC,CACjC,EACAO,iBAAAA,CAAkBpE,EAAOmC,GACvBnC,EAAMmC,eAAiBA,CACzB,EACAkC,mBAAAA,CAAoBrE,GAAO,IAAE4D,EAAG,MAAEC,IAChC7D,EAAMyC,iBAAiBmB,GAAOC,CAChC,EACAS,cAAAA,CAAetE,EAAO2C,GACpB3C,EAAM2C,YAAcA,CACtB,EACA4B,cAAAA,CAAevE,EAAO4C,GACpB5C,EAAM4C,YAAcA,CACtB,EACA4B,oBAAAA,CAAqBxE,EAAOyE,GAC1BzE,EAAMqC,aAAeoC,EACrBzB,aAAa0B,QAAQ,eAAgBD,EACvC,EACAE,oBAAAA,CAAqB3E,EAAO0C,GAC1B1C,EAAM0C,aAAeA,CACvB,GAEFkC,QAAS,CACP,qBAAMC,EAAgB,OAAEjF,IACtB,IACE,MAAMkF,QAAiBhG,EAAAA,EAAMQ,IAAI,mBACjCM,EAAO,gBAAiBkF,EAASrF,KACnC,CAAE,MAAOW,GACP2E,QAAQC,IAAI5E,EACd,CACF,EACA,yBAAM6E,EAAoB,OAAErF,IAC1B,IACE,MAAMkF,QAAiBhG,EAAAA,EAAMQ,IAAI,uBAC3B4F,EAAaJ,EAASrF,KAAKA,KAC3B8B,EAAiB2D,EAAWC,IAAIC,IAC7B,CACLC,IAAK,uBAAyBD,EAAUC,aAMtCC,QAAQC,IAAIhE,EAAe4D,IAAIC,GAC5B,IAAIE,QAAQ,CAACE,EAASC,KAC3B,MAAMC,EAAM,IAAIC,MAChBD,EAAIE,OAASJ,EACbE,EAAIG,QAAUJ,EACdC,EAAII,IAAMV,EAAUC,QAGxBzF,EAAO,oBAAqB2B,EAC9B,CAAE,MAAOnB,GACP2E,QAAQC,IAAI5E,EACd,CACF,GAEF2F,QAAS,CACT,EACAC,QAAS,EAACC,EAAAA,EAAAA,GAAqB,CAE7BC,MAAO,CACL,aACA,eACA,oBACA,iBACA,qBACA,mBACA,iBACA,sBACA,eACA,oBACA,mBACA,eACA,cACA,mB,g+nDClKN,MAAMC,EAAa,aAEnB,SAASC,IACP,MAAMC,EAASrD,aAAaC,QAAQkD,GACpC,MAAe,UAAXE,GAAiC,OAAXA,EAAwBA,EAC3C,OACT,CAEA,MAAMhG,GAAOiG,EAAAA,EAAAA,IAAW,CACtBC,QAAQ,EACRC,OAAQJ,IACRK,eAAgB,QAChBC,SAAU,CAAE,QAASC,EAAMC,GAAEA,KAGxB,SAASC,EAAUL,GACxBnG,EAAKC,OAAOkG,OAASA,EACrBxD,aAAa0B,QAAQyB,EAAYK,GACjCM,SAASC,gBAAgBC,KAAkB,UAAXR,EAAqB,QAAU,IACjE,CAGA,O,ksCCuEA,IACIS,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,EACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,EACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,EACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,GACAC,GAAAA,I,4CChMG,SAASC,GAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAAyB,SAAkB,eAC3CC,EAAgC,MACtC,OAAO,YAAc,SAAaA,EAA+B,CAC/DjH,OAAQ+G,EAASG,eAChB,CACDC,SAAS,SAAS,IAAM,EAAC,SAAaH,KACtCI,EAAG,GACF,EAAG,CAAC,UACT,C,mDCNA,IACE,IAAAnO,GACE,MAAO,CACLoO,WAAY,KACZC,oBAAqB,KAEzB,EACAC,SAAU,KACL,SAAW,CAAC,aAAc,gBAC7B,aAAAL,GACE,MAA6B,UAAtBM,KAAKC,MAAMzH,OAAqB,KAAaI,GAAA,CACtD,GAEF,OAAAsH,GAEEF,KAAKG,UAAU,KACbH,KAAKI,wBACLJ,KAAKK,4BAET,EACA,aAAAC,GAEMN,KAAKF,qBACPE,KAAKF,oBAAoBS,YAE7B,EACAC,MAAO,CAAC,EACRC,QAAS,CACP,qBAAAL,GACE,IAEE,GAAI,MAAkBvO,MAAMiH,SAAS4H,MAEnC,YADAV,KAAKH,YAAa,SAAkB/G,SAAS4H,OAK/CV,KAAKH,YAAa,SAAkB/G,SAAS4H,KAAM,CACjDC,WAAY,CACVC,MAAO,gBACPC,WAAY,OACZC,SAAU,SACVC,cAAe,IACfC,YAAY,EACZC,aAAa,GAEfC,SAAU,CACRC,EAAG,SACHC,EAAG,YAGPrK,QAAQC,IAAI,6CACd,CAAE,MAAO5E,GACP2E,QAAQ3E,MAAM,0CAA2CA,EAC3D,CACF,EACA,wBAAAiO,GAEEL,KAAKF,oBAAsB,IAAIuB,iBAAiBlM,IAC9C,MAAMmM,EAAcxI,SAASyI,cAAc,6BACvCD,EAEEtB,KAAKH,YACPG,KAAKH,WAAW2B,QAAQ,CACtBN,SAAU,CACRC,EAAG,SACHC,EAAG,YAMLpB,KAAKH,YACPG,KAAKH,WAAW2B,QAAQ,CACtBN,SAAU,CACRC,EAAG,SACHC,EAAG,cAMbpB,KAAKF,oBAAoB2B,QAAQ3I,SAAS4H,KAAM,CAC9CgB,WAAW,EACXC,SAAS,GAEb,I,YCrFJ,MAAMC,IAA2B,QAAgB,GAAQ,CAAC,CAAC,SAAS3C,MAEpE,U,kECgBA4C,EAAAA,GAAQC,OAAOC,IAEf,MAAMC,IAAMC,EAAAA,EAAAA,IAAUC,IAChBC,IAAOC,EAAAA,EAAAA,MAEbJ,GAAIlP,UAAU,oBAAqBuP,EAAAA,IACnC,IAAK,MAAOzM,GAAK9C,MAAcwP,OAAOC,QAAQC,IAC1CR,GAAIlP,UAAU8C,GAAK9C,IAIvB,MAAM2P,GAAoBA,KACtB,MAAMC,EAAc5J,SAASC,gBAC7B,IAAI4J,EAGJ,GAAIhR,GAAAA,EAAMK,MAAM4C,aAA2C,OAA5BjD,GAAAA,EAAMK,MAAM2C,YAEvCgO,EAAahR,GAAAA,EAAMK,MAAM2C,gBACtB,CAGH,GADAgO,EAAaC,OAAOC,WAAW,gCAAgCC,SAC1DH,EAAY,CACb,MAAMI,EAAM,IAAIC,KACVC,EAAOF,EAAIG,WACjBP,EAAaM,GAAQ,IAAMA,EAAO,CACtC,CAEAtR,GAAAA,EAAMC,OAAO,iBAAkB+Q,EACnC,CAEIA,EACAD,EAAYS,UAAUrB,IAAI,QAE1BY,EAAYS,UAAUC,OAAO,SAI/BC,GAAsBV,IACxB,MAAMD,EAAc5J,SAASC,gBACzB4J,EACAD,EAAYS,UAAUrB,IAAI,QAE1BY,EAAYS,UAAUC,OAAO,SAK/BE,GAAmBhQ,IACrBwF,SAASyK,MAAQjQ,GAAYkQ,WAAa,iBAIxCC,GAAiBA,CAACd,EAAYrP,KAEhC,MAAMoQ,EAAgB5K,SAAS6K,iBAAiB,yEAChDD,EAAcE,QAAQC,GAAQA,EAAKT,UAEnC,MAAMU,EAAWhL,SAASiL,cAAc,QAClCC,EAAgBlL,SAASiL,cAAc,QACvCE,EAAenL,SAASiL,cAAc,QAC5CD,EAASI,IAAM,OACfF,EAAcE,IAAM,mBACpBD,EAAaC,IAAM,YAEfvB,GACAmB,EAASK,KAAO7Q,GAAY8Q,UAAY,8BACxCJ,EAAcG,KAAO7Q,GAAY8Q,UAAY,8BAC7CH,EAAaE,KAAO7Q,GAAY8Q,UAAY,gCAE5CN,EAASK,KAAO7Q,GAAY8Q,UAAY,yBACxCJ,EAAcG,KAAO7Q,GAAY8Q,UAAY,yBAC7CH,EAAaE,KAAO7Q,GAAY8Q,UAAY,0BAGhDtL,SAASqJ,KAAKkC,YAAYP,GAC1BhL,SAASqJ,KAAKkC,YAAYL,GAC1BlL,SAASqJ,KAAKkC,YAAYJ,IAG9BtS,GAAAA,EAAM2S,SAAS,mBAAmB/S,KAAK,KAEnCkR,KAGAa,GAAgB3R,GAAAA,EAAMkD,QAAQvB,YAC9BmQ,GAAe9R,GAAAA,EAAMK,MAAM2C,YAAahD,GAAAA,EAAMkD,QAAQvB,YAGtD3B,GAAAA,EAAM4S,UAAU,CAACC,EAAUxS,KACD,mBAAlBwS,EAASC,MAA6B9S,GAAAA,EAAMK,MAAM4C,cAClDyO,GAAmBrR,EAAM2C,aAEzB8O,GAAezR,EAAM2C,YAAahD,GAAAA,EAAMkD,QAAQvB,aAI9B,mBAAlBkR,EAASC,MAA8BD,EAASE,UAEhDjC,KAEAgB,GAAe9R,GAAAA,EAAMK,MAAM2C,YAAahD,GAAAA,EAAMkD,QAAQvB,eAI9D0O,GAAI2C,IAAIhT,GAAAA,GAAOgT,IAAI3R,GAAAA,GAAQ2R,IAAIC,EAAAA,GAAaD,IAAItS,GAAAA,IAAMwS,MAAM,UAC7DrS,MAAMJ,IACL2E,QAAQ3E,MAAM,qCAAsCA,GACpD4P,GAAI2C,IAAIhT,GAAAA,GAAOgT,IAAI3R,GAAAA,GAAQ2R,IAAIC,EAAAA,GAAaD,IAAItS,GAAAA,IAAMsS,IAAIxC,IAAM0C,MAAM,S,GClItEC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpR,IAAjBqR,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CAGjDE,QAAS,CAAC,GAOX,OAHAE,EAAoBJ,GAAUK,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAGpEI,EAAOD,OACf,CAGAH,EAAoBO,EAAIF,E,WCzBxB,IAAIG,EAAW,GACfR,EAAoBS,EAAI,SAASC,EAAQC,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAIR,EAASS,OAAQD,IAAK,CACrCL,EAAWH,EAASQ,GAAG,GACvBJ,EAAKJ,EAASQ,GAAG,GACjBH,EAAWL,EAASQ,GAAG,GAE3B,IAJA,IAGIE,GAAY,EACPC,EAAI,EAAGA,EAAIR,EAASM,OAAQE,MACpB,EAAXN,GAAsBC,GAAgBD,IAAatD,OAAO6D,KAAKpB,EAAoBS,GAAGY,MAAM,SAASxQ,GAAO,OAAOmP,EAAoBS,EAAE5P,GAAK8P,EAASQ,GAAK,GAChKR,EAASW,OAAOH,IAAK,IAErBD,GAAY,EACTL,EAAWC,IAAcA,EAAeD,IAG7C,GAAGK,EAAW,CACbV,EAASc,OAAON,IAAK,GACrB,IAAIO,EAAIX,SACE/R,IAAN0S,IAAiBb,EAASa,EAC/B,CACD,CACA,OAAOb,CArBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAIR,EAASS,OAAQD,EAAI,GAAKR,EAASQ,EAAI,GAAG,GAAKH,EAAUG,IAAKR,EAASQ,GAAKR,EAASQ,EAAI,GACrGR,EAASQ,GAAK,CAACL,EAAUC,EAAIC,EAwB/B,C,eC5BAb,EAAoBwB,EAAI,SAASpB,GAChC,IAAIqB,EAASrB,GAAUA,EAAOsB,WAC7B,WAAa,OAAOtB,EAAO,UAAY,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAJ,EAAoB2B,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,C,eCNAzB,EAAoB2B,EAAI,SAASxB,EAAS0B,GACzC,IAAI,IAAIhR,KAAOgR,EACX7B,EAAoB8B,EAAED,EAAYhR,KAASmP,EAAoB8B,EAAE3B,EAAStP,IAC5E0M,OAAOwE,eAAe5B,EAAStP,EAAK,CAAEmR,YAAY,EAAMzV,IAAKsV,EAAWhR,IAG3E,C,eCPAmP,EAAoBiC,EAAI,CAAC,EAGzBjC,EAAoBkC,EAAI,SAASC,GAChC,OAAO5P,QAAQC,IAAI+K,OAAO6D,KAAKpB,EAAoBiC,GAAGG,OAAO,SAASC,EAAUxR,GAE/E,OADAmP,EAAoBiC,EAAEpR,GAAKsR,EAASE,GAC7BA,CACR,EAAG,IACJ,C,eCPArC,EAAoBsC,EAAI,SAASH,GAEhC,MAAO,MAAQA,EAAU,IAAM,CAAC,GAAK,WAAW,GAAK,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,YAAYA,GAAW,KACxQ,C,eCHAnC,EAAoBuC,SAAW,SAASJ,GAEvC,MAAO,OAASA,EAAU,IAAM,CAAC,GAAK,WAAW,GAAK,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,YAAYA,GAAW,MACzQ,C,eCJAnC,EAAoBwC,EAAI,WACvB,GAA0B,kBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,EAChB,CAAE,MAAOR,GACR,GAAsB,kBAAXrE,OAAqB,OAAOA,MACxC,CACA,CAPuB,E,eCAxBmC,EAAoB8B,EAAI,SAASa,EAAKC,GAAQ,OAAOrF,OAAOsF,UAAUC,eAAexC,KAAKqC,EAAKC,EAAO,C,eCAtG,IAAIG,EAAa,CAAC,EACdC,EAAoB,iBAExBhD,EAAoBiD,EAAI,SAAS3Q,EAAK4Q,EAAMrS,EAAKsR,GAChD,GAAGY,EAAWzQ,GAAQyQ,EAAWzQ,GAAK6Q,KAAKD,OAA3C,CACA,IAAIE,EAAQC,EACZ,QAAWxU,IAARgC,EAEF,IADA,IAAIyS,EAAUvP,SAASwP,qBAAqB,UACpCvC,EAAI,EAAGA,EAAIsC,EAAQrC,OAAQD,IAAK,CACvC,IAAIwC,EAAIF,EAAQtC,GAChB,GAAGwC,EAAEC,aAAa,QAAUnR,GAAOkR,EAAEC,aAAa,iBAAmBT,EAAoBnS,EAAK,CAAEuS,EAASI,EAAG,KAAO,CACpH,CAEGJ,IACHC,GAAa,EACbD,EAASrP,SAASiL,cAAc,UAEhCoE,EAAOM,QAAU,QACb1D,EAAoB2D,IACvBP,EAAOQ,aAAa,QAAS5D,EAAoB2D,IAElDP,EAAOQ,aAAa,eAAgBZ,EAAoBnS,GAExDuS,EAAOrQ,IAAMT,GAEdyQ,EAAWzQ,GAAO,CAAC4Q,GACnB,IAAIW,EAAmB,SAASC,EAAMC,GAErCX,EAAOtQ,QAAUsQ,EAAOvQ,OAAS,KACjCmR,aAAaC,GACb,IAAIC,EAAUnB,EAAWzQ,GAIzB,UAHOyQ,EAAWzQ,GAClB8Q,EAAOe,YAAcf,EAAOe,WAAWC,YAAYhB,GACnDc,GAAWA,EAAQrF,QAAQ,SAAS+B,GAAM,OAAOA,EAAGmD,EAAQ,GACzDD,EAAM,OAAOA,EAAKC,EACtB,EACIE,EAAUI,WAAWR,EAAiBS,KAAK,UAAMzV,EAAW,CAAE6Q,KAAM,UAAW6E,OAAQnB,IAAW,MACtGA,EAAOtQ,QAAU+Q,EAAiBS,KAAK,KAAMlB,EAAOtQ,SACpDsQ,EAAOvQ,OAASgR,EAAiBS,KAAK,KAAMlB,EAAOvQ,QACnDwQ,GAActP,SAASqJ,KAAKkC,YAAY8D,EAnCkB,CAoC3D,C,eCvCApD,EAAoBuB,EAAI,SAASpB,GACX,qBAAXqE,QAA0BA,OAAOC,aAC1ClH,OAAOwE,eAAe5B,EAASqE,OAAOC,YAAa,CAAE3T,MAAO,WAE7DyM,OAAOwE,eAAe5B,EAAS,aAAc,CAAErP,OAAO,GACvD,C,eCNAkP,EAAoB0E,EAAI,G,eCAxB,GAAwB,qBAAb3Q,SAAX,CACA,IAAI4Q,EAAmB,SAASxC,EAASyC,EAAUC,EAAQpS,EAASC,GACnE,IAAIoS,EAAU/Q,SAASiL,cAAc,QAErC8F,EAAQ3F,IAAM,aACd2F,EAAQpF,KAAO,WACXM,EAAoB2D,KACvBmB,EAAQC,MAAQ/E,EAAoB2D,IAErC,IAAIqB,EAAiB,SAASjB,GAG7B,GADAe,EAAQhS,QAAUgS,EAAQjS,OAAS,KAChB,SAAfkR,EAAMrE,KACTjN,QACM,CACN,IAAIwS,EAAYlB,GAASA,EAAMrE,KAC3BwF,EAAWnB,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOnF,MAAQwF,EACzDO,EAAM,IAAIC,MAAM,qBAAuBjD,EAAU,cAAgB8C,EAAY,KAAOC,EAAW,KACnGC,EAAIhY,KAAO,iBACXgY,EAAIE,KAAO,wBACXF,EAAIzF,KAAOuF,EACXE,EAAIG,QAAUJ,EACVJ,EAAQX,YAAYW,EAAQX,WAAWC,YAAYU,GACvDpS,EAAOyS,EACR,CACD,EAUA,OATAL,EAAQhS,QAAUgS,EAAQjS,OAASmS,EACnCF,EAAQ1F,KAAOwF,EAGXC,EACHA,EAAOV,WAAWoB,aAAaT,EAASD,EAAOW,aAE/CzR,SAASqJ,KAAKkC,YAAYwF,GAEpBA,CACR,EACIW,EAAiB,SAASrG,EAAMwF,GAEnC,IADA,IAAIc,EAAmB3R,SAASwP,qBAAqB,QAC7CvC,EAAI,EAAGA,EAAI0E,EAAiBzE,OAAQD,IAAK,CAChD,IAAI2E,EAAMD,EAAiB1E,GACvB4E,EAAWD,EAAIlC,aAAa,cAAgBkC,EAAIlC,aAAa,QACjE,GAAe,eAAZkC,EAAIxG,MAAyByG,IAAaxG,GAAQwG,IAAahB,GAAW,OAAOe,CACrF,CACA,IAAIE,EAAoB9R,SAASwP,qBAAqB,SACtD,IAAQvC,EAAI,EAAGA,EAAI6E,EAAkB5E,OAAQD,IAAK,CAC7C2E,EAAME,EAAkB7E,GACxB4E,EAAWD,EAAIlC,aAAa,aAChC,GAAGmC,IAAaxG,GAAQwG,IAAahB,EAAU,OAAOe,CACvD,CACD,EACIG,EAAiB,SAAS3D,GAC7B,OAAO,IAAI5P,QAAQ,SAASE,EAASC,GACpC,IAAI0M,EAAOY,EAAoBuC,SAASJ,GACpCyC,EAAW5E,EAAoB0E,EAAItF,EACvC,GAAGqG,EAAerG,EAAMwF,GAAW,OAAOnS,IAC1CkS,EAAiBxC,EAASyC,EAAU,KAAMnS,EAASC,EACpD,EACD,EAEIqT,EAAqB,CACxB,IAAK,GAGN/F,EAAoBiC,EAAE+D,QAAU,SAAS7D,EAASE,GACjD,IAAI4D,EAAY,CAAC,GAAK,EAAE,GAAK,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,GAClHF,EAAmB5D,GAAUE,EAASc,KAAK4C,EAAmB5D,IACzB,IAAhC4D,EAAmB5D,IAAkB8D,EAAU9D,IACtDE,EAASc,KAAK4C,EAAmB5D,GAAW2D,EAAe3D,GAAS3V,KAAK,WACxEuZ,EAAmB5D,GAAW,CAC/B,EAAG,SAASD,GAEX,aADO6D,EAAmB5D,GACpBD,CACP,GAEF,CA3E2C,C,eCK3C,IAAIgE,EAAkB,CACrB,IAAK,GAGNlG,EAAoBiC,EAAEd,EAAI,SAASgB,EAASE,GAE1C,IAAI8D,EAAqBnG,EAAoB8B,EAAEoE,EAAiB/D,GAAW+D,EAAgB/D,QAAWtT,EACtG,GAA0B,IAAvBsX,EAGF,GAAGA,EACF9D,EAASc,KAAKgD,EAAmB,SAEjC,GAAI,iBAAiBC,KAAKjE,GAyBnB+D,EAAgB/D,GAAW,MAzBE,CAEnC,IAAIkE,EAAU,IAAI9T,QAAQ,SAASE,EAASC,GAAUyT,EAAqBD,EAAgB/D,GAAW,CAAC1P,EAASC,EAAS,GACzH2P,EAASc,KAAKgD,EAAmB,GAAKE,GAGtC,IAAI/T,EAAM0N,EAAoB0E,EAAI1E,EAAoBsC,EAAEH,GAEpD9U,EAAQ,IAAI+X,MACZkB,EAAe,SAASvC,GAC3B,GAAG/D,EAAoB8B,EAAEoE,EAAiB/D,KACzCgE,EAAqBD,EAAgB/D,GACX,IAAvBgE,IAA0BD,EAAgB/D,QAAWtT,GACrDsX,GAAoB,CACtB,IAAIlB,EAAYlB,IAAyB,SAAfA,EAAMrE,KAAkB,UAAYqE,EAAMrE,MAChE6G,EAAUxC,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOxR,IACpD1F,EAAMmZ,QAAU,iBAAmBrE,EAAU,cAAgB8C,EAAY,KAAOsB,EAAU,IAC1FlZ,EAAMF,KAAO,iBACbE,EAAMqS,KAAOuF,EACb5X,EAAMiY,QAAUiB,EAChBJ,EAAmB,GAAG9Y,EACvB,CAEF,EACA2S,EAAoBiD,EAAE3Q,EAAKgU,EAAc,SAAWnE,EAASA,EAC9D,CAGJ,EAUAnC,EAAoBS,EAAEU,EAAI,SAASgB,GAAW,OAAoC,IAA7B+D,EAAgB/D,EAAgB,EAGrF,IAAIsE,EAAuB,SAASC,EAA4Bha,GAC/D,IAKIuT,EAAUkC,EALVxB,EAAWjU,EAAK,GAChBia,EAAcja,EAAK,GACnBka,EAAUla,EAAK,GAGIsU,EAAI,EAC3B,GAAGL,EAASkG,KAAK,SAASC,GAAM,OAA+B,IAAxBZ,EAAgBY,EAAW,GAAI,CACrE,IAAI7G,KAAY0G,EACZ3G,EAAoB8B,EAAE6E,EAAa1G,KACrCD,EAAoBO,EAAEN,GAAY0G,EAAY1G,IAGhD,GAAG2G,EAAS,IAAIlG,EAASkG,EAAQ5G,EAClC,CAEA,IADG0G,GAA4BA,EAA2Bha,GACrDsU,EAAIL,EAASM,OAAQD,IACzBmB,EAAUxB,EAASK,GAChBhB,EAAoB8B,EAAEoE,EAAiB/D,IAAY+D,EAAgB/D,IACrE+D,EAAgB/D,GAAS,KAE1B+D,EAAgB/D,GAAW,EAE5B,OAAOnC,EAAoBS,EAAEC,EAC9B,EAEIqG,EAAqBC,KAAK,6BAA+BA,KAAK,8BAAgC,GAClGD,EAAmBlI,QAAQ4H,EAAqBnC,KAAK,KAAM,IAC3DyC,EAAmB5D,KAAOsD,EAAqBnC,KAAK,KAAMyC,EAAmB5D,KAAKmB,KAAKyC,G,ICpFvF,IAAIE,EAAsBjH,EAAoBS,OAAE5R,EAAW,CAAC,KAAM,WAAa,OAAOmR,EAAoB,MAAQ,GAClHiH,EAAsBjH,EAAoBS,EAAEwG,E","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\n\r\nfunction getStoredLocale() {\r\n const stored = localStorage.getItem(LOCALE_KEY)\r\n if (stored === 'zh-CN' || stored === 'en') return stored\r\n return 'zh-CN'\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale(),\r\n fallbackLocale: 'zh-CN',\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nexport function setLocale(locale) {\r\n i18n.global.locale = locale\r\n localStorage.setItem(LOCALE_KEY, locale)\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\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 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 // 初始化时应用 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 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\":\"b436b08e\",\"63\":\"503c70e6\",\"318\":\"0e6c0e43\",\"339\":\"7edc2fbc\",\"380\":\"62235203\",\"549\":\"ffe205fb\",\"711\":\"936a7109\",\"743\":\"f28adaf7\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"803\":\"4f2ba956\",\"903\":\"1e4b549d\",\"997\":\"55a5bae5\"}[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 + \".\" + {\"30\":\"c12a4e5b\",\"63\":\"398231b7\",\"173\":\"f8fd1fa2\",\"318\":\"5939769e\",\"322\":\"2b40f004\",\"339\":\"de55c4be\",\"549\":\"0f00dee2\",\"711\":\"e6dbd5da\",\"743\":\"4cb567b6\",\"773\":\"b55efe26\",\"787\":\"f6f7607a\",\"803\":\"398231b7\",\"997\":\"c0e2a060\"}[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 = {\"30\":1,\"63\":1,\"173\":1,\"318\":1,\"322\":1,\"339\":1,\"549\":1,\"711\":1,\"743\":1,\"773\":1,\"787\":1,\"803\":1,\"997\":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(!/^(173|30|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","getStoredLocale","stored","createI18n","legacy","locale","fallbackLocale","messages","zhCN","en","setLocale","document","documentElement","lang","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","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.79c9e5f6.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\n\r\nfunction getStoredLocale() {\r\n const stored = localStorage.getItem(LOCALE_KEY)\r\n if (stored === 'zh-CN' || stored === 'en') return stored\r\n return 'zh-CN'\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale(),\r\n fallbackLocale: 'zh-CN',\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nexport function setLocale(locale) {\r\n i18n.global.locale = locale\r\n localStorage.setItem(LOCALE_KEY, locale)\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\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 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 // 初始化时应用 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 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\":\"b436b08e\",\"63\":\"503c70e6\",\"339\":\"7edc2fbc\",\"380\":\"62235203\",\"549\":\"ffe205fb\",\"711\":\"936a7109\",\"743\":\"f28adaf7\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"803\":\"4f2ba956\",\"903\":\"1e4b549d\",\"927\":\"1adefc82\",\"997\":\"55a5bae5\"}[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 + \".\" + {\"30\":\"c12a4e5b\",\"63\":\"398231b7\",\"173\":\"f8fd1fa2\",\"322\":\"2b40f004\",\"339\":\"de55c4be\",\"549\":\"0f00dee2\",\"711\":\"e6dbd5da\",\"743\":\"4cb567b6\",\"773\":\"b55efe26\",\"787\":\"f6f7607a\",\"803\":\"398231b7\",\"927\":\"b1a356fd\",\"997\":\"c0e2a060\"}[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 = {\"30\":1,\"63\":1,\"173\":1,\"322\":1,\"339\":1,\"549\":1,\"711\":1,\"743\":1,\"773\":1,\"787\":1,\"803\":1,\"927\":1,\"997\":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(!/^(173|30|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","getStoredLocale","stored","createI18n","legacy","locale","fallbackLocale","messages","zhCN","en","setLocale","document","documentElement","lang","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","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.79c9e5f6.js.map.gz b/frontend-dist/js/app.79c9e5f6.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..0ae249248a4078dfe2115f036d79b04b68aa8c0b GIT binary patch literal 18375 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¨TOa`F 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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(30),t.e(318)]).then(t.bind(t,58318)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(63)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(30),t.e(549)]).then(t.bind(t,11017)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(997)]).then(t.bind(t,60997)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(339)]).then(t.bind(t,27339)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(803)]).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(743).then(t.bind(t,92743))},{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 c},xS:function(){return d}});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":"拖拽 点击Ctrl + V 粘贴上传","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":"渠道类型","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":"搜索:#标签 -#排除标签","sortByDateDesc":"按时间倒序","sortByNameAsc":"按名称升序","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":{"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 Ctrl + V 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","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","sortByDateDesc":"Sort by date (newest)","sortByNameAsc":"Sort by name (A-Z)","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":{"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";function r(){const e=localStorage.getItem(i);return"zh-CN"===e||"en"===e?e:"zh-CN"}const s=(0,o.hU)({legacy:!0,locale:r(),fallbackLocale:"zh-CN",messages:{"zh-CN":n,en:l}});function d(e){s.global.locale=e,localStorage.setItem(i,e),document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}var c=s},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(18642),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),P=t(19223),F=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),V=t(17214),H=t(44845),j=t(55319),K=t(71669),Q=t(38557),J=t(15925),G=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),Pe=t(88502),Fe=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),Ve=t(93212),He=t(40275),je=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),Ge=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,P.Jt,F.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,V.MT,H.vH,j.v,K.bx,Q.tU,J.zp,G.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,Pe.ye,Fe.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,Ve._2,He.DX,je.l9,Ke.GR,Qe.ns,Je.Be,Ge.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(()=>{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),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:"b436b08e",63:"503c70e6",318:"0e6c0e43",339:"7edc2fbc",380:"62235203",549:"ffe205fb",711:"936a7109",743:"f28adaf7",773:"f0780366",787:"d0dbc2dd",803:"4f2ba956",903:"1e4b549d",997:"55a5bae5"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{30:"c12a4e5b",63:"398231b7",173:"f8fd1fa2",318:"5939769e",322:"2b40f004",339:"de55c4be",549:"0f00dee2",711:"e6dbd5da",743:"4cb567b6",773:"b55efe26",787:"f6f7607a",803:"398231b7",997:"c0e2a060"}[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"),c=0;cA;2c#q9Cx7U{22L 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 M0C9D)GJrDy0P0O%X8-^I diff --git a/frontend-dist/js/app.86c477e6.js.map.gz b/frontend-dist/js/app.86c477e6.js.map.gz deleted file mode 100644 index 6fd142d3999a732d5ab140804d30674d0e1b0085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18376 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 j+x2{g3(DMshd{3HH`u1